NHibernate를 레거시 데이터베이스 주위에 랩핑하려고합니다. 그것은 내가 TABLE_DETAIL이라고 불리는 "테이블 테이블"로 가장 잘 묘사되어 있습니다.NHibernate 테이블 매핑 테이블
COLUMN_NAME | TABLE_VALUE | TABLE_DESC
-------------+-----------------+---------------------------------
state | CA | California
state | NY | New York
...
country | US | United States
country | CA | Canada
나는 테이블 당 클래스 계층 구조 전략이 사용 유창함 NHibernate에 매핑하기 위해 노력하고있어 : 그것은 다음과 같이 보입니다. 즉, 나는 TableDetail 클래스를 가지며 State와 Country를 하위 클래스로 가진다. 나는 COLUMN_NAME을 판별 자로 사용합니다.
TableDetailMap.cs :
public class TableDetailMap : ClassMap<TableDetail>
{
public TableDetailMap()
{
Table("TABLE_DETAIL");
CompositeId()
.KeyProperty(x => x.TableValue, "TABLE_VALUE")
.KeyProperty(x => x.ColumnName, "COLUMN_NAME");
Map(x => x.ColumnName).Column("COLUMN_NAME");
Map(x => x.TableDesc).Column("TABLE_DESC");
DiscriminateSubClassesOnColumn("COLUMN_NAME");
}
}
StateMap.cs :
public class StateMap : SubclassMap<State>
{
public StateMap()
{
DiscriminatorValue("state");
}
}
TABLE_DETAIL 따라서 (COLUMN_NAME/TABLE_VALUE 이루어진) 복합 키를 가지며, 상기 판별 한 것이다 그 분야의. 내 문제는 NHibernate가 합성 키의 두 구성 요소가 다른 테이블에서 참조 될 것으로 기대하지만, 구분자가 정의했기 때문에 복합 키의 두 구성 요소가 모두 필요하다고해서는 안됩니다.
LINE_1 | CITY | STATE | ZIP
-----------------+-----------------+-----------+----------------
123 Any Street | Anytown | CA | 12345
문제는 내가 내 주 클래스에 내 "상태"필드를 매핑 할 때 온다 :
예를 들어, 나는 ADDRESS_RECORD 테이블을 가지고있다. ADDRESS_RECORD의 STATE 열은 TABLE_DETAIL 기본 키의 절반 (TABLE_VALUE 부분)을 참조합니다. COLUMN_NAME 부분은 "상태"입니다. 이는 판별 자이기 때문에 제공해야합니다. 그러나 NHibernate에 그렇게 생각하고,이 예외가 발생하지 않습니다
이 이Foreign key (FK3D33E87CA66E339C:ADDRESS_RECORD [STATE])) must have same number of columns as the referenced primary key (TABLE_DETAIL [TABLE_VALUE, COLUMN_NAME])
가 어떻게 NHibernate에 자동으로 복합 키의 두 번째 절반의 값으로 "상태"를 제공하기 위해 알 수 있도록이를 매핑 할 수 있습니까?
자세한 정보를 제공 할 수 있으면 알려 주시기 바랍니다.