之间有什么区别
ObjectQuery<SalesOrderHeader> query =
context.Contacts.Include("SalesOrderHeaders").Include("SalesOrderDetails");
和
Contact contact =
context.Contacts.Include("SalesOrderHeaders.SalesOrderDetails").FirstOrDefault();
使用一个优于另一个的任何优势?
我的主要困惑是在第一个Include
中使用2 Include
并在第二个{{1}}中使用2个表。
提前谢谢。
答案 0 :(得分:1)
在实体框架上,您有一些名为导航属性(在.edmx模型上命名),因此您可以根据它们访问相关实体,换句话说,您可以使用导航属性来急切加载(包含)相关数据。
我猜你有这样的关系:One Contact可以有很多SalesOrderHeaders,一个SalesOrderHeader可以有很多SalesOrderDetails,所以如果你从contacts实体开始加载并希望加载这两个关系,你应该这样做:
Contact contact = context.Contacts.Include("SalesOrderHeaders").Include("SalesOrderHeaders.SalesOrderDetails").FirstOrDefault();
正如您所看到的,我们首先使用include来从DB中获取SalesOrderHeaders,并使用secound来将SalesOrderDetails带入SalesOrderHeaders导航属性,因为我们从Contacts
开始