entity-framework - entity framework code first relationships
¿Cómo deseo incluir con entusiasmo los elementos hijo y nieto de una entidad en Entity Framework Code First? (2)
Imagine tres entidades (Cliente, Libro, Autor) relacionadas de esta manera:
Un cliente tiene muchos libros
Un libro tiene un autor
Yo uso esa información para imprimir un informe como este:
Customer: Peter
Book: To Kill a Mockingbird - Author: Harper Lee
Book: A Tale of Two Cities - Author: Charles Dickens
Customer: Melanie
Book: The Hobbit - Author: J. R. R. Tolkien
Cuando consulto Clientes obtengo, como era de esperar, un grupo de consultas de la siguiente naturaleza
- Una consulta para obtener los clientes
- Una consulta por cliente para obtener sus libros
- Una consulta por libro para obtener su autor
Puedo reducir el número de consultas al incluir los libros de esta manera:
var customers = db.Customers.Include (c => c.Books);
Pero no sé cómo cargar el tercer nivel (autor). ¿Cómo puedo hacer eso?
Además, no es necesario usar la sobrecarga de cadena. Este método también funcionará:
var customers = db.Customers.Include(c => c.Books.Select(b => b.Author));
Para ver más ejemplos, consulte la publicación de blog del equipo EF: http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx
Y este tutorial: http://www.asp.net/entity-framework/tutorials/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application
Hay una sobrecarga para Include
que acepta una cadena que puede indicar la ruta completa a las propiedades adicionales que necesita:
var customers = db.Customers.Include("Books.Author");
Parece extraño porque "Autor" no es una propiedad en una colección de libros (sino una propiedad en cada libro individual) pero funciona. Darle un giro.