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