为什么Entity Framework查询不返回未保存的实体

e-m*_*mre 35 entity-framework entity-framework-4

请考虑以下代码:

var Products_First = (from Entities.Product p in myContext.Product  
                      select p);

Entities.Product newProduct = new Entities.Product();
newProduct.Name = "New Product";
myContext.Products.AddObject(newProduct);

var Products_Again = (from Entities.Product p in myContext.Product  
                      select p);
Run Code Online (Sandbox Code Playgroud)

请注意,此处Products_Again查询时未保存上下文,即myContext.SaveChanges()未调用.

Products_Again包含与...相同数量的产品Products_First.为什么是这样?Product由同一上下文对象添加和跟踪新的.为什么我在新查询结果中看不到新产品?

将新对象添加到上下文后,是否有办法在不保存更改的情况下到达新对象?

Cra*_*ntz 36

类型的属性ObjectQuery<T>,如myContext.Product,始终查询数据库.这就是他们所做的.

在EF 4.1中,您可以使用DbSet<T>.Local查询内存.

在EF <4.1中,您将使用:

ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Select(o => o.Entity).OfType<Product>()
Run Code Online (Sandbox Code Playgroud)

  • 它有效,但<4.1解决方案应包括`Select(o => o.Entity)`:`ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Select(o => o.Entity).OfType <Product>() ` (3认同)