2011-06-21 12 views
31

Considere el siguiente código:¿Por qué no Entity Framework consultas devuelven entidades no guardados

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); 

Note aquí que Products_Again se consulta sin guardar el contexto, es decir myContext.SaveChanges() no se llama.

Products_Again contiene la misma cantidad de productos que Products_First. ¿Por qué es esto? Un nuevo objeto de contexto agrega y rastrea un nuevo Product. ¿Por qué no puedo ver el nuevo producto en los nuevos resultados de la consulta?

Después de agregar un nuevo objeto al contexto ¿hay alguna manera de alcanzar el nuevo objeto sin guardar los cambios?

Respuesta

33

Propiedades del tipo ObjectQuery<T>, como myContext.Product, siempre consulta la base de datos. Eso es lo que hacen.

En EF 4.1 puede usar DbSet<T>.Local para consultar la memoria.

En EF < 4.1 se debería utilizar:

ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Select(o => o.Entity).OfType<Product>() 
+0

Por lo tanto, para obtener un conjunto de resultados con elementos tanto de DB y la memoria que debería mantener una lista separada de mi cuenta y tratar de mantenerlo al día. ¿Es la solución propuesta para EF 4.0? –

+0

No entiendo su pregunta, le di una solución para EF 4.0/EF 1. –

+0

Lo siento ... mal ... Leí mal –

Cuestiones relacionadas