gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:59 27 4
gpt4 key购买 nike

我正在使用 EF 更新我的数据库。

我首先根据一些条件查询数据库。这将返回我期望的记录(或返回 null)。自然地,在此查询期间,执行查询时会有轻微的延迟。

然后我将一个属性(在本例中为可空 bool 值)从 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;
}
}

我做错了什么?

最佳答案

Entity Framework 使用更改跟踪来检测当前上下文中任何实体的更改。

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

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

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

这应该可以解决问题。

关于c# - 为什么我的数据库不能用 EF 保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28396360/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com