2015-02-08 65 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

相关问题