C# NHibernate:具有单表接口的复杂对象映射
我正在尝试映射一个具有接口(INameTypeInfo)属性的复合对象。该接口由两个类(PersonNameInfo和CompanyNameInfo)实现。所有这三种结构的信息都在同一个表中 对象看起来像这样: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
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。你是说只是地图公司名称信息吗?是的,这是我一直做的我会写一个例子。