복합 ID를 구성하는 두 ID 이외의 필드가있는 경우 자동 매핑을 사용하여 연결 테이블을 매핑 할 수 없습니다. 귀하의 Party 테이블에는 잘 디자인되지 않았기 때문에 자동 매핑 규칙을 위반하는 Id 필드가 있습니다 (즉, 어디에서나 색인을 생성 할 수 있지만 복합 ID는 자동 증가 ID가 없어야합니다).
이 문제를 해결하려면 Party 용 ClassMap을 만들고 ID를 ID로 매핑하고 참조 인과 조직을 참조해야합니다.
그러면 개인 및 조직 엔티티에서 파티에 HasManyToMany 매핑을 생성하는 대신 파티 엔티티에 HasMany를 생성합니다.
실제로 오토 맵핑은 복합 기본 키만 포함하는 경우에만 링크 테이블을 통한 다 대다 관계를 암시하는 반면 명확하게 코드와 ERD를 유사하게 대조합니다.
3 일 동안 저를 곤란하게 만들었습니다.이 루트를 "해킹"으로 사용했습니다. 나중에 2 주 전 Fluent NHibernate의 Google 그룹에서이 설명을 읽었습니다.
나는 도움이 되었으면 좋겠어.
도 참조하십시오. my post about the same situation
편집 :
다음은 상당히 높은 수준입니다. 엔티티 생성자에서 콜렉션을 초기화하고 setter 메소드를 생성해야합니다. Getting Started
public class Party {
public virtual int Id { get; set; }
public virtual Person Person { get; set; }
public virtual Organization Organization { get; set; }
}
public class PartyMap : ClassMap<Party> {
public PartyMap() {
Id(x => x.Id);
References(x => x.Person);
References(x => x.Organization);
}
}
public class Person {
public virtual int Id { get; set; }
public virtual string FName { get; set; }
public virtual string LName { get; set; }
public virtual ICollection<Party> Parties { get; set; }
}
public class PersonMap : ClassMap<Person> {
public PersonMap() {
Id(x => x.Id);
Map(x => x.FName);
Map(x => x.LName);
HasMany(x => x.Parties);
}
}
public class Organization {
public virtual int Id { get; set; }
public virtual string OrgName { get; set; }
public virtual string OrgDescription { get; set; }
public virtual ICollection<Party> Parties { get; set; }
}
public class OrganizationMap : ClassMap<Organization> {
public OrganizationMap() {
Id(x => x.Id);
Map(x => x.OrgName);
Map(x => x.OrgDescription);
HasMany(x => x.Parties);
}
}
참조 (x => x.Person, "PersonId") 참고. 참조 (x => x.Organization, "OrganizationId"). Not.Nullable(); 작동하지 않습니까? – jweyrich