是否有可能让Entity Framework识别已创建但尚未保存在数据库中的对象?
Say Table1是一个包含两列的表。 Table1ID和名称。
如果我执行以下代码…
var Obj1 = new Table1(); Obj1.Name = "hello" TestDBEntities.AddToTable1(Obj1); var currObj = Table1.Where(o => o.Name.Contains("hello")).FirstOrDefault();
currObj将返回null。
但是,如果我这样做
var Obj1 = new Table1(); Obj1.Name = "hello" TestDBEntities.AddToTable1(Obj1); **TestDBEntitles.SaveChanges();** var currObj = Table1.Where(o => o.Name.Contains("hello")).FirstOrDefault();
然后currObj将返回我创建的第一个对象。 这是因为该对象在数据库中。
我正在创建一个大批量进程,我不希望将所有内容保存到数据库直到最后。 但是,我必须进行检查,例如确保某个对象尚未添加等,这需要我在将这些对象保存到数据库之前引用它们。
是否可以在Entity Framework中进行LINQ查询,该查询可以识别内存中尚未保存到数据库的对象。
将创建和未保存的对象添加到List
然后像上面一样使用linq过滤该列表。
编辑:实际上,我的立场得到了纠正。 看起来您可以在ObjectContext
上指定合并选项。
TestDBEntities.ObjectStateManager.GetObjectStateEntries(EntityState.Added) .Where(o => o.GetType() == typeof(Object1Type) && o => o.Name.Contains("hello")) .FirstOrDefault();
文档 。
我在这里有点晚了… @DavidWicks的答案并不能讲述整个故事!
上下文确实提供了一种查询机制 – 它在EF4.1中比4.0更容易
在4.1中查看http://msdn.microsoft.com/en-us/library/gg696248(v=vs.103).aspx dbSet.Local属性保存对象的所有本地更改(尚未删除)在上下文中,所以你需要的只是查询!
那只是你需要做的事情:
Datacontext.YourTable.Add(entity); var x=Datacontext.YourTable.Local;
用.Local获取实体dbset的本地状态:)