将表继承映射为与NHibernate的一对一关系

时间:2010-02-25 12:59:04

标签: nhibernate fluent-nhibernate map one-to-one

我有一个数据库,它在Person和Address(使用person id)之间建立了一对一的关系。但是,我找不到使用NHibernate制作地图的方法。

我的表格结构如下:

PersonTable

PersonId
PersonName
PersonAge

AddressTable

PersonId
CountryName
StreetName
StateName

我希望有这样的东西作为最后一堂课:

PersonClass

int Id
string Name
int Age
Address HomeAddress

AddressClass

string Street
string Country
string State
Person Owner

我尝试使用HasOne关系,但我不能将PersonId重用为地址标识符。

谢谢!

编辑:我忘了提到我使用的是FluentNHibernate,因此流畅的映射和XML都可以。

3 个答案:

答案 0 :(得分:0)

问题是您的数据库架构不代表Person和Address之间的“Has One”关系。它代表着“有很多”的关系;您可能会人为地将其限制为每人一个地址,但这不会改变模型是每人多个地址的事实。

要获得“Has One”关系,您可以将AddressID放在PersonTable上。

答案 1 :(得分:0)

我是使用Id()创建的.General类映射中的GeneratedBy.Foreign()将其引用到Person的ID并且它有效。

谢谢!

答案 2 :(得分:0)

我会把它映射为Person的一个组件。在人类ClassMap中添加以下内容:

 Component(x => x.Address, m =>
        {
            m.Map(x => x.Street, "Street");
            m.Map(x => x.State, "State");
            // more here
        });

干杯