嘿,我有一个遗留数据库,其中一个Person对象被映射,有一个家庭成员的集合,如下所示:
class Person
{
...
string Id; /* 9-digits string */
IList<Person> Family;
...
}
PERSON表似乎是:
Id: CHAR(9), PK
FamilyId: INT, NOT NULL
以及其他几个不相关的专栏。 我正在尝试使用FamilyId列将Family集合映射到PERSON表,而不是上面提到的PK。 所以,我实际上有一对多的自我表引用。
当我的映射看起来像这样时,我收到一条错误,说“投放无效”:
...
<set name="Family" table="Person" lazy="false">
<key column="FamilyId" />
<one-to-many class="Person" />
</set>
...
因为很明显,NHibernate正在尝试在PK列,Id和'辅助'列FamilyId之间进行连接,而不是将FamilyId列连接到自身。
有什么想法吗?
答案 0 :(得分:0)
我可能无法掌握您在此处使用的数据,但听起来我的数据模型不完整。我希望你有一个Family实体和一个Person实体,这样每个Person都有一个属于它的Family属性,而且Family实体有一个属于该族的Person对象列表。
我想这里缺少的是有关您尝试映射的数据库架构的足够信息。在FamilyId中有什么值,它们是否引用了其他表(即Family表的外键)?
答案 1 :(得分:0)
更好地说:
[ID] - PK, char(9)
[FirstName], char(25) not-null
[LastName], char(25) not-null
[FamilyId], int not-null
实际上,可以使用使用FamilyId和PersonId的链接表绑定族成员来建模族关系。但我现在无法创建它,因为它是现有的生产系统。 目前,我必须以某种方式为家庭收藏品建模。除了BryanD提供的解决方案,看起来相当不错,有人可以使用FamilyId列提供一种将表连接到自身的方法,而不是PK吗?