是否有可能让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的本地状态:)