代码之家  ›  专栏  ›  技术社区  ›  tucaz

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

  •  0
  • tucaz  · 技术社区  · 14 年前

    我有一个数据库,它在一个人和一个地址(使用个人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作为地址标识符。

    谢谢!

    编辑: 我忘记提到我正在使用FluentHibernate,所以Fluent映射和XML都可以。

    3 回复  |  直到 14 年前
        1
  •  0
  •   Chris Shaffer    14 年前

    问题是,您的数据库模式并不表示人员和地址之间的“有一个”关系。它表示一个“有多个”关系;您可能人为地将其限制为每个人一个地址,但这不会改变模型是每个人多个地址的事实。

    要建立“有一个”的关系,您可以将地址ID放在PersonalTable上。

        2
  •  0
  •   tucaz    14 年前

    我在地址类映射中使用id().generatedby.foreign()将其引用到人的id,然后它就工作了。

    谢谢!

        3
  •  0
  •   Samuel Goldenbaum    14 年前

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

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

    干杯