2010-05-11 12 views
9

Al leer este artículo de MSDN titulado "Trabajar con ObjectSet (Entity Framework)" se muestran dos ejemplos sobre cómo agregar un producto ... uno para 3.5 y otro para 4.0.3 métodos para agregar un "Producto" a través de Entity Framework. ¿Cual es la diferencia?

http://msdn.microsoft.com/en-us/library/ee473442.aspx

A través de mi falta de conocimiento soy algo, posiblemente, falta por completo aquí, pero nunca añadir un producto como éste:

//In .NET Framework 3.5 SP1, use the following code: (ObjectQuery) 
    using (AdventureWorksEntities context = new AdventureWorksEntities()) 
    { 
     // Add the new object to the context. 
     context.AddObject("Products", newProduct); 
    } 

    //New in .NET Framework 4, use the following code: (ObjectSet) 
    using (AdventureWorksEntities context = new AdventureWorksEntities()) 
    { 
     // Add the new object to the context. 
     context.Products.AddObject(newProduct); 
    } 

yo no lo hubiera hecho de cualquier manera y apenas utilizado:

// (My familiar way) 
    using (AdventureWorksEntities context = new AdventureWorksEntities()) 
    { 
     // Add the new object to the context. 
     context.AddToProducts(newProduct); 
    } 

¿Cuál es la diferencia entre estas tres formas?

¿Es "a mi manera" solo otra forma de usar un ObjectQuery?

Gracias, Kohan

Respuesta

9

Todos ellos hacen lo mismo, con pequeñas diferencias en la sintaxis.

Primero, veamos el camino de 3.5 y "a su manera". Si nos fijamos en el archivo codegen para su EDMX, verá algo como:

public void AddToProducts(Product product) 
    { 
     base.AddObject("Products", product); 
    } 

Así que estos dos métodos son exactamente lo mismo, excepto que la cadena mágica en su código se sustituye por una versión que puede codegened nunca estar equivocado

El ".NET 4 way" hace lo mismo, pero lo hace de manera diferente. Utiliza el ObjectSet<T> fuertemente tipado, que le permite crear una referencia fuertemente tipada de forma dinámica pero sin utilizar cadenas. Sin embargo, en el caso de agregar un objeto a un contexto, no hay una ventaja real que yo sepa, excepto que le permite ser más consistente acerca de cómo hace referencia a sus entidades, las lee desde el contexto usando la misma propiedad. (Context.Products) que usas para escribirlas.

+0

Los ObjectSets se almacenan en caché en el generador de código predeterminado. Así que supongo que hay una pequeña ganancia de perf. Para usar context.Products.Add ya que podrá reutilizar el mismo conjunto sin búsquedas. –

+0

Excelente. Muchas gracias por explicarme esto. Resultó ser mucho más simple de lo que había imaginado. Realmente debería buscar en todos los archivos generados más a menudo para comprender mejor lo que ocurre detrás de escena. Voy a echar un vistazo ahora y ver qué otras cosas están pasando! – 4imble

+0

* Vale * la pena leer el archivo codegen. Utiliza este código todo el tiempo, aunque no lo escriba. –

Cuestiones relacionadas