저는 EF 코드 우선을 처음 접했고 간단히 질문 할 수 있습니다. EF 코드와의 단방향 관계 매핑 우선
나는 사람과 주소 간의 간단한 관계가 : 내 사람들이 테이블에 AddressID 했어People
------
PersonID
Name
Address
-------
AddressID
Address1
PersonID
대부분의 시간을; 하지만이 DB는 PersonID를 참조한다는 점에서 약간 "뒤로"있습니다. 필자는 Person 객체를 다루고 관련 주소를 얻고 싶다. 이 관계는 1 인당 많은 주소를 가질 수 있지만 항상 1 : 1입니다. (제 3 자 DB입니다. 스키마를 제어 할 수 없습니다.)
Person과 Address를 연결하기 위해 Code First의 관계를 어떻게 설정합니까? 유창한 API를 사용하고 있지만 두 엔티티에 키가 없어도이를 설정하는 방법은 없습니다. 이상적으로, 나는 나의 실체가 같이 설정할 수 싶습니다 :
Person {
public int PersonID {get;set;}
public string Name {get;set;}
//other person properites
//navigation property
public Address Address {get;set;}
}
Address {
public string Address1 {get;set;}
//other properties for address
//navigation property
public Person Person {get;set;}
}
나는 관계를 구성 할 수있는 몇 가지 방법을 시도했다, 그러나 그것은 밖으로 erroring 유지합니다. Address 클래스를 복잡한 유형으로 정의하려고 시도했지만 별도의 테이블이므로 작동 할 수 있습니까? 또한 HasOptional 및 WithOptionalDependant를 사용하여 시도했지만 아무 소용이 없습니다.
그래서 내 EF CF 로직을 구성하여 Person 내의 엔티티 인 주소를 허용하는 방법에 대한 의견.
어떤 제안이나 도움을 주시면 대단히 감사하겠습니다.
업데이트 아래에서 Mark의 제안을 시도했지만 다른 오류가 발생합니다.
modelBuilder.Entity<Address>()
.HasKey(a => a.PersonID);
modelBuilder.Entity<Address>()
.Property(a => a.PersonID)
.HasColumnName(<my real column name>);
는 그래서 DB에서 엔티티의 키가 PersonID이지만, 그것은 FK 다시 사람도있다 :
내 주소 엔티티 설정 세트 엔티티 키로 PersonID (내 의견을 참조하십시오). 이것이 문제의 원인입니까? (다시, 제 DB가 아닙니다 - 제 3 자입니다.) 도움을 주시면 대단히 감사하겠습니다. 감사!!
답변 해 주셔서 감사합니다. 나는 1 : 많은 설정을 시도하지 않았다. 변경 사항을 적용했을 때 'Person_Addresses'관계에서 'Multiplicity가'Person_Addresses_Target '역할에서 유효하지 않습니다. Dependent Role은 키 속성을 참조하기 때문에 Dependent Role의 다중 도의 상한선은 '1'이어야합니다. "내 설정에서 Address 테이블의 PK는 PersonID이고이 키가 내 엔터티 키로 설정되어 있습니다. 모델 빌더 설정. –
아하나. 나는 당신의 셋업을 오해했다. 나는 AddressId가 테이블의 PK라고 생각했다. 어쩌면 [콘크리트 별 표] (http://blogs.microsoft.co.il/blogs/gilf/archive/2010/01/25/table-per-concrete-type-inheritance-inentity-framework.aspx) 더 많은 도움이 될까요? –