2015-02-08 93 views
1

我正在使用EF來更新我的數據庫。爲什麼我的數據庫不能用EF保存?

我首先根據一些標準查詢數據庫。這將返回我期待的記錄(或返回null)。當然,在查詢過程中,執行查詢時會有一些延遲。

然後我在這種情況下將屬性更改爲可爲null的布爾值從false或true或創建一個新條目。

然後我將這個對象添加到我的實體,最後選擇myEntitiy.SaveChanges()。這似乎並沒有執行。沒有延遲。然而代碼傳遞到下一行,所以不會拋出異常。

這是我

public class MyCompany : AbstractCompany 
{ 
    public override bool UpdateStatus(string emailAddress, bool isOptIn) 
    { 
     var personDetail = (from a in base.Entities.MyCompanyTable 
          where a.EmailAddress == emailAddress 
          select a).SingleOrDefault(); 

     if (personDetail == null) 
     { 
      personDetail = new MyCompanyTable(); 
      personDetail.EmailAddress = emailAddress; 
     } 

     personDetail.IsSubscribed = isOptIn; 

     base.Entities.MyCompanyTable.Add(personDetail); //also tried attach, same issue over 
     return base.SaveData(); 
    } 
} 

我的基類是

public abstract bool UpdateStatus(string emailAddress, bool isOptIn); 

    protected Entities Entities 
    { 
     get { return new Entities(); } 
    } 



    protected bool SaveData() 
    { 
     var x = Entities.GetValidationErrors();//returns 0 items 
     try 
     { 
      Entities.SaveChanges(); 
      return true; 
     } 
     catch (Exception e) 
     { 
      return false; 
     } 
    } 

我做了什麼錯?

回答

5

實體框架使用更改跟蹤來檢測當前上下文中任何實體的更改。

但是,您的Entities屬性會在每次調用時實例化一個新的上下文實例。所以當你查詢你使用一個上下文,然後當你保存你使用另一個! EF無法檢測到您做了任何更改!

這將是最好的實例化語境中的基類的構造函數:

public abstract class BaseClass 
{ 
    protected BaseClass() 
    { 
     Entities = new Entities(); 
    } 
    protected Entities Entities { get; private set; } 
} 

這應該修復它。

+0

當然哦......謝謝 – Dave 2015-02-08 20:16:16

相關問題