我正在使用實體框架4.1。一個沒有外鍵的簡單表映射到一個對象(TransmissionHistory表和對象)。然而,當我保存時,其中一個字段是NULL,儘管值已經清楚地設置好了,並且在遍歷代碼和寫入時我可以看到它到日誌。 (字段名稱是WhoDidIt。)實體框架不執行獲取每個屬性
在進一步調查中,我用Get和Set以及私有支持屬性替換了對象中的自動屬性。事實證明,當數據庫保存被執行時,其他屬性的「Get」被執行,但不是我的問題WhoDidIt屬性。
下面是類定義的一部分:
public partial class TransmissionHistory
{
private string _id;
private string _transmissonTable;
private string _whoDidIt;
public string Id
{
get { return _id; }
set { _id = value; }
}
public string TransmissionTable
{
get { return _transmissonTable; }
set { _transmissonTable = value; }
}
public string WhoDidIt
{
get { return _whoDidIt; }
set { _whoDidIt = value; }
}
下面是創建並保存對象的代碼。
TransmissionHistory trxHist = new TransmissionHistory();
trxHist.Id = guid.ToString();
trxHist.TransmissionTable = "MyTransmission";
trxHist.WhoDidIt = "Me";
_db.TransmissionHistories.Add(trxHist);
_db.SaveChanges();
當我把斷點,很明顯,數據庫調用SaveChanges是打了另外兩個屬性Get方法,但不是WhoDidIt。所以即使trxHist對象在WhoDidIt中有一個值,它總是以NULL值保存到數據庫中。這是建立爲「數據庫優先」和Visual Studio構建的對象。我也嘗試刪除並重建表格並重新生成代碼,並更改了字段名稱。這裏發生了什麼?
愚蠢的問題:數據庫中的表是否有匹配的列?對不起,不得不問。 – Moho 2013-03-28 04:15:22
是的,它的確如此。我做了「數據庫優先」,所以表首先被創建,並且我從表中生成了類。該字段當前爲varchar 12且可爲空(SQL Server 2008)。原來,它不是可以空的,我的插入失敗,因爲這個領域。 – DZx 2013-03-28 04:22:11
所以你使用EDMX文件?檢查EDMX中的映射,使概念模型的字段映射到存儲模型的字段 – Moho 2013-03-28 04:24:52