직접적인 생각은 아닙니다. 당신이 무언가를지도로 만들면 관계 또는 칼럼으로 끝날 것입니다.
CREATE TABLE dbo.Customers
(
...
PrimaryAddress_ID INT NULL
)
당신이 중 하나를 Addresses
1로 매핑 할 것이다 Address
개체 정의에 따라 : 그것은 테이블로 끝날 것
public class Customer
{
...
public Address PrimaryAddress { get; set; }
public ICollection<Address> Addresses { get; set; }
}
: N에 (Customer_ID
를 같은 당신이 기대하는 경우 고객은 볼 수 있습니다 Addresse
테이블 또는 M : N (접합 테이블) 관계
PrimaryAddress_ID
은 cus와 관련된 주소 여야한다는 제약이 있어야하기 때문에 그리 좋지 않습니다. tomer. 이러한 제한은 아마도 방아쇠로 점검해야합니다.
또한 읽기 전용 응용 프로그램을 작성하거나 INSTEAD OF 트리거를 정의 할 준비가되어 있지 않으면보기가 필요하지 않습니다.
public class Customer
{
...
public ICollection<Address> Addresses { get; set; }
[NotMapped]
public Address PrimaryAddress
{
get
{
return Addresses.Single(a => a.IsPrimary);
}
// If you need set you can implement it in similar way
}
}
당신은 또한 속성없이 정의 할 수 있지만 Ignore
OnModelCreating
에 사용할 필요가 :
당신은 매핑하지 않고 그것을 할 수
이 protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>()
.Ignore(c => c.PrimaryAddress);
}
접근 방법의 단점이 있다는 것입니다 항상 모든 주소를로드합니다. 경우
당신은 당신이 사용할 수있는 다른 다음 기본 주소를 필요로하지 않습니다 알고
context.Entry<Customer(customer)
.Collection(c => c.Addresses)
.Query()
.Where(a => a.IsPrimary)
.Load();
이 내용은 기본 주소를로드하지만 당신은 데이터베이스에 roundrips해야합니다 있도록 먼저 고객을로드해야합니다.
감사합니다. 흥미로운 점이 몇 가지 있습니다. 나는 테이블이 이미 데이터베이스에 있다고 언급 했으므로 코드 생성 측면에 대해서는 걱정하지 않지만 게시물에서 여러 가지 새로운 것을 배웠습니다! 나는 검색 결과만을위한 것이기 때문에 여전히 뷰를 사용할 수 있으며 다중 왕복 여행에 대한 아이디어가 마음에 들지 않습니다. – stewartml