C# NHibernate:具有单表接口的复杂对象映射

C# NHibernate:具有单表接口的复杂对象映射,c#,nhibernate,mapping,legacy,fluent,C#,Nhibernate,Mapping,Legacy,Fluent,我正在尝试映射一个具有接口(INameTypeInfo)属性的复合对象。该接口由两个类(PersonNameInfo和CompanyNameInfo)实现。所有这三种结构的信息都在同一个表中 对象看起来像这样: public class Name : Entity { public virtual string FirstName {get; set;} public virtual string LastName {get; set;} public virtual

我正在尝试映射一个具有接口(INameTypeInfo)属性的复合对象。该接口由两个类(PersonNameInfo和CompanyNameInfo)实现。所有这三种结构的信息都在同一个表中

对象看起来像这样:

public class Name : Entity
{
    public virtual string FirstName {get; set;}

    public virtual string LastName {get; set;}

    public virtual INameTypeInfo NameTypeInfo {get; set;}

    etc...
}
public class PersonNameTypeInfo()
{
    public string SSN {get; set;}
    public string AKAFistName {get; set;}
    public string AKALastName {get; set;}
    etc...
}

public class CompanyNameTypeInfo()
{
    public string FederalIDNumber {get; set;}
    public string AKAName {get; set;}
    etc...
}
其他对象如下所示:

public class Name : Entity
{
    public virtual string FirstName {get; set;}

    public virtual string LastName {get; set;}

    public virtual INameTypeInfo NameTypeInfo {get; set;}

    etc...
}
public class PersonNameTypeInfo()
{
    public string SSN {get; set;}
    public string AKAFistName {get; set;}
    public string AKALastName {get; set;}
    etc...
}

public class CompanyNameTypeInfo()
{
    public string FederalIDNumber {get; set;}
    public string AKAName {get; set;}
    etc...
}
数据库表如下所示:

public class Name : Entity
{
    public virtual string FirstName {get; set;}

    public virtual string LastName {get; set;}

    public virtual INameTypeInfo NameTypeInfo {get; set;}

    etc...
}
public class PersonNameTypeInfo()
{
    public string SSN {get; set;}
    public string AKAFistName {get; set;}
    public string AKALastName {get; set;}
    etc...
}

public class CompanyNameTypeInfo()
{
    public string FederalIDNumber {get; set;}
    public string AKAName {get; set;}
    etc...
}
名字

  • 名字
  • 姓氏
  • 阿卡菲斯特名称 当您加载th人员时,您也可以使用该公司。所以当你说 Person.company.name将获得名称,如果您更改了与公司打交道的人员中的任何内容,Hibernate将在您将更改提交回数据库时级联所有更改

    也许这不是你的问题,只是一个值得思考的问题

    但是,如果您想使它们成为复合关键点,可以创建第三个对象示例

    public class  organization
    {
      private person person;
      private company company;
    }
    

    而不是在一个人里面有同伴。当您检索组织时,您可以同时获得个人和公司DAO,因为我一直在做的就是只做公司,然后您就可以访问ehw hole company对象,Hibernate正在级联…而不是跟踪您Kevin。你是说只是地图公司名称信息吗?是的,这是我一直做的我会写一个例子。