Подтвердить что ты не робот

Почему запросы 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 добавляется и отслеживается одним и тем же объектом контекста. Почему я не вижу новый продукт в результатах нового запроса?

После добавления нового объекта в контекст есть способ достичь нового объекта без сохранения изменений?

4b9b3361

Ответ 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>()