I는 Customer
많은 SalesOrders
을 내 시나리오에서는 엔티티 프레임 워크 v6.1.3마술 문자열을 사용하지 않고 Entity Framework의 많은 : 하나의 탐색 속성을로드하려면 어떻게해야합니까?
를 사용 열망 로딩 실체가있는 경우 복잡한 탐색 속성을 지정하는 방법을 찾고 있어요하고 SalesOrder
정확히 하나의 DeliveryAddress
관련이있다 엔티티 코드 조각은 다음과 같습니다
public class Customer {
public virtual ICollection<SalesOrder> SalesOrders { get; set; }
}
public class SalesOrder {
public Customer Customer { get;set; }
public Address DeliveryAddress { get; set; }
}
public class Address {
public virtual ICollection<SalesOrder> SalesOrders { get; set; }
}
내가 지금 그 주문 그들의 모든 주문 및 배달 주소를 포함하여, 고객을 열망 -로드하는 방법을 구현해야합니다.
나는이 작업을 수행 할 수 있습니다
public class MyDbContext : DbContext {
public virtual DbSet<Customer> Customers { get; set; }
public Customer LoadCustomerIncludingSalesOrders(int customerId) {
var customer = Customers
.Include("SalesOrders")
.Include("SalesOrders.DeliveryAddress")
.FirstOrDefault(c => c.Id == customerId);
return customer;
}
}
하지만 모델의 비트를 이름 바꾸기와 두통 모든 종류의 원인이되는 마법 문자열을 사용하여로드 할 탐색 속성을 지정할 필요.
EF는 표현식을 사용하여 탐색 속성을 지정할 수도 있지만이 같은 표현을 사용하여 Customer> SalesOrder> DeliveryAddress 연결을 지정하는 방법을 알지 못합니다. 가능한가? 이반 Stoev 자신의 의견에서 지적 하듯이
public Customer LoadCustomerIncludingSalesOrders(int customerId) {
var customer = Customers.
.Include(c => c.SalesOrders)
.Include(c => /* WHAT DO I PUT HERE? */)
.FirstOrDefault(c => c.Id == customerId);
return customer;
}
한 가지 방법은. – Mats391
VS에서'Include'의 람다 오버로드에 마우스를 가져 가면, 당신을 포함하여 다양한 시나리오에서 어떻게 사용 하는지를 설명하는 전체 도움말 항목을 볼 수 있습니다. 기본적으로 내부에서 '선택'을 사용해야합니다. 'Include (c => c.SalesOrder.Select (so => so.DeliveryAddress)) ' –
@IvanStoev 그것은 절대적으로 완벽합니다. 동의 할 수 있도록 답변으로 게시 하시겠습니까? 고맙습니다. –