2013-03-28 46 views
0

我正在使用實體框架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構建的對象。我也嘗試刪除並重建表格並重新生成代碼,並更改了字段名稱。這裏發生了什麼?

+0

愚蠢的問題:數據庫中的表是否有匹配的列?對不起,不得不問。 – Moho 2013-03-28 04:15:22

+0

是的,它的確如此。我做了「數據庫優先」,所以表首先被創建,並且我從表中生成了類。該字段當前爲varchar 12且可爲空(SQL Server 2008)。原來,它不是可以空的,我的插入失敗,因爲這個領域。 – DZx 2013-03-28 04:22:11

+0

所以你使用EDMX文件?檢查EDMX中的映射,使概念模型的字段映射到存儲模型的字段 – Moho 2013-03-28 04:24:52

回答

0

這個問題就走了它自己的,但這裏是我認爲它造成的:

我們使用一個數據庫第一種方法。數據庫中的基礎表已更改,但EDMX模型未刷新。即使這個特定的領域沒有改變,它似乎給了這種奇怪的行爲,直到我們從數據庫刷新我們的模型。