NHibernate:使用单个表的接口映射复杂对象

时间:2011-08-26 17:51:55

标签: c# nhibernate mapping legacy fluent

我正在尝试映射具有接口(INameTypeInfo)属性的复合对象。此接口由2个类(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...
}

db表如下所示:

姓名

  • 名字
  • AKAFistName< ------当信息是针对公司时,此字段用于AKAName
  • AKALastName
  • SSN
  • FID
  • CompanyContact

另请注意:Name对象也会被其他对象继承,例如Party:Name,Provider:Name等......

数据库是一个已经在使用的遗留数据库。

我如何用流利的方式映射它的任何例子都会有所帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

public class person
{

// this is the table for person 
   private String name;
   private String lastName;
   private Company company;


}


public class Company
{ 
  private string name;
  private string address;
  // more properties.
}

当您加载人员时,您也可以使用该公司。所以当你说 Person.company.name它将获取名称,如果您更改处理公司Hibernate的人员中的任何内容,则在将其提交回数据库时级联所有更改。

也许这不是你的问题,而只是一种思考的食物。

但如果你想让它们成为复合键,你可以制作第三个对象示例

public class  organization
{
  private person person;
  private company company;
}
而不是让一个人在公司里面。当你检索组织时,你会得到个人和公司DAO