Почему запросы 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>()