Say Table1是一个包含两列的表。表1ID和名称。
如果我执行以下代码......
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查询,以便了解内存中尚未保存到数据库的对象。
答案 0 :(得分:6)
我在这里有点晚了... @DavidWicks的回答并不能说明整个故事!
上下文确实提供了一种查询机制 - 它在EF4.1中比4.0
更容易在4.1中查看http://msdn.microsoft.com/en-us/library/gg696248(v=vs.103).aspx dbSet.Local属性保存上下文中对象(尚未删除)的所有本地更改,因此只需查询即可!
答案 1 :(得分:3)
将创建和未保存的对象添加到List<T>
,然后像上面一样使用linq过滤该列表。
ObjectContext
上指定合并选项。
TestDBEntities.ObjectStateManager.GetObjectStateEntries(EntityState.Added)
.Where(o => o.GetType() == typeof(Object1Type)
&& o => o.Name.Contains("hello"))
.FirstOrDefault();
docs。
答案 2 :(得分:0)
这只是你需要做的事情:
Datacontext.YourTable.Add(entity);
var x=Datacontext.YourTable.Local;
使用.Local获取实体dbset的本地状态:)