Почему запросы Entity Framework не возвращают несохраненные объекты
Рассмотрим следующий код:
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);
Обратите внимание, что Products_Again
запрашивается без сохранения контекста, то есть myContext.SaveChanges()
не вызывается.
Products_Again
содержит такое же количество продуктов, как Products_First
. Почему это? Новый Product
добавляется и отслеживается одним и тем же объектом контекста. Почему я не вижу новый продукт в результатах нового запроса?
После добавления нового объекта в контекст есть способ достичь нового объекта без сохранения изменений?
Ответы
Ответ 1
Свойства типа ObjectQuery<T>
, например myContext.Product
, всегда запрашивают БД. Это то, что они делают.
В EF 4.1 вы можете использовать DbSet<T>.Local
для запроса в память.
В EF < 4.1 вы бы использовали:
ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Select(o => o.Entity).OfType<Product>()