gpt4 book ai didi

c# - 是否可以在调用 DbContext.SaveChanges 之前查询 Entity Framework ?

转载 作者:IT王子 更新时间:2023-10-29 04:16:56 27 4
gpt4 key购买 nike

在这个简单的示例中,我有两个实体:事件和地址。我有一个每晚运行的控制台应用程序,用于从 XML 源导入事件数据并将其添加到我的数据库中。

当我循环遍历 XML 事件节点( Entity Framework 上下文内部)时,我检查数据库中是否已存在具有给定值的地址记录。如果没有,它会添加一条新记录。

using (DemoContext context = new DemoContext())
{
foreach (XmlNode eventNode in eventsXml.SelectNodes("/Events/Event"))
{
Event newEvent = new Event();

newEvent.Title = **get from XML**

Address address = context.Addresses.Where(a =>
a.Title.Equals(title, StringComparison.OrdinalIgnoreCase) &&
a.Address1.Equals(address1, StringComparison.OrdinalIgnoreCase) &&
a.Address2.Equals(address2, StringComparison.OrdinalIgnoreCase) &&
a.City.Equals(city, StringComparison.OrdinalIgnoreCase) &&
a.State.Equals(state, StringComparison.OrdinalIgnoreCase) &&
a.ZipCode.Equals(zipCode, StringComparison.OrdinalIgnoreCase)
).FirstOrDefault();

if (address != null)
newEvent.Location = address;
else
{
newEvent.Location.Title = title;
newEvent.Location.Address1 = address1;
newEvent.Location.Address2 = address2;
newEvent.Location.City = city;
newEvent.Location.State = state;
newEvent.Location.ZipCode = zipCode;
}

context.Events.Add(newEvent);
}

context.SaveChanges();
}

我知道在每个事件之后调用 context.SaveChanges() 会降低性能,所以我想在最后做这一切(或者分批做,但这与这个问题无关)。但是,当我查询 context.Addresses 时,在我调用 context.SaveChanges() 之前它似乎并不知道任何新地址,所以我得到了重复的记录。

就我的目的而言,在每条记录之后而不是最后保存可能没问题,但我想知道是否有一个好的、简单的替代方法。

最佳答案

当您以触及数据库的方式查询时,上下文中新添加的实体不会包含在结果中。在 EF 4.1 中,您可以通过 DbSet<T>.Local 获取它们

参见:

Why do Entity Framework queries not return unsaved entities

Entity Framework: Re-finding objects recently added to context

关于c# - 是否可以在调用 DbContext.SaveChanges 之前查询 Entity Framework ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905449/

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