Dav*_*ave 1 c# entity-framework
我正在使用EF来更新我的数据库.
我首先根据一些标准查询数据库.这将返回我期望的记录(或返回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();
}
}
Run Code Online (Sandbox Code Playgroud)
我的基础是
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
实体框架使用更改跟踪来检测当前上下文中任何实体的更改.
但是,您的Entities
属性在每次调用时都会实例化一个新的上下文实例.因此,当您查询时使用一个上下文,然后当您保存时使用另一个上下文!EF无法检测到您进行了任何更改!
最好在基类的构造函数中实例化你的上下文:
public abstract class BaseClass
{
protected BaseClass()
{
Entities = new Entities();
}
protected Entities Entities { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
这应该解决它.
归档时间: |
|
查看次数: |
43 次 |
最近记录: |