为什么我的数据库不能用EF保存?

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)

我做错了什么?

Dea*_*ard 5

实体框架使用更改跟踪来检测当前上下文中任何实体的更改.

但是,您的Entities属性在每次调用时都会实例化一个新的上下文实例.因此,当您查询时使用一个上下文,然后当您保存时使用另一个上下文!EF无法检测到您进行了任何更改!

最好在基类的构造函数中实例化你的上下文:

public abstract class BaseClass
{
    protected BaseClass()
    {
        Entities = new Entities();
    }
    protected Entities Entities { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

这应该解决它.