JKa*_*r11 28 c# entity-framework savechanges dbcontext entity-framework-5
在这个简单的例子中,我有两个实体:Event和Address.我每晚都运行一个控制台应用程序来从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();
}
Run Code Online (Sandbox Code Playgroud)
我知道在每个事件之后调用context.SaveChanges()的性能较慢,所以我想在最后完成所有这些(或者分批进行,但这与此问题无关).但是,当我查询context.Addresses时,它似乎不知道任何新的地址,直到我调用context.SaveChanges()后,我得到重复的记录.
为了我的目的,可以在每个记录之后而不是在结尾时保存,但我想知道是否有一个好的,简单的替代方案.
Ali*_*eza 26
当您以触摸数据库的方式进行查询时,上下文中新添加的实体不会包含在结果中.在EF 4.1中,您可以通过它获取它们DbSet<T>.Local
见:
为什么Entity Framework查询不返回未保存的实体
和
| 归档时间: |
|
| 查看次数: |
14695 次 |
| 最近记录: |