表按代码按NHibernate映射的每个子类继承映射

表按代码按NHibernate映射的每个子类继承映射,nhibernate,inheritance,nhibernate-mapping,mapping-by-code,Nhibernate,Inheritance,Nhibernate Mapping,Mapping By Code,如何在新的NHibernate映射中按此类的每个子类策略表中的代码编写映射: public class Person { public virtual int Id { get; set; } public virtual string Name { get; set; } } public class JuridicalPerson : Person { public virtual int Id { get; set; } public virtual st

如何在新的NHibernate映射中按此类的每个子类策略表中的代码编写映射:

public class Person
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

public class JuridicalPerson : Person
{
    public virtual int Id { get; set; }
    public virtual string LegalName { get; set; }
}

public class PrivatePerson : Person
{
    public virtual int Id { get; set; }
    public virtual bool Sex { get; set; }
}

下面是一个可能的映射,其形式略显缩写

public class PersonMapping : ClassMapping<Person>
{
    public PersonMapping()
    {
        Table("person");
        Id(x => x.Id, m => m.Generator(Generators.Native));
        Property(x => x.Name);
    }
}

public class JuridicalPersonMapping : JoinedSubclassMapping<JuridicalPerson>
{
    public JuridicalPersonMapping()
    {
        Table("juridical_person");
        Key(m => m.Column("person_id"));
        Property(x => x.LegalName);
    }
}

public class PrivatePersonMapping : JoinedSubclassMapping<PrivatePerson>
{
    public PrivatePersonMapping()
    {
        Table("private_person");
        Key(m => m.Column("person_id"));
        Property(x => x.Sex);
    }
}
公共类PersonMapping:ClassMapping
{
公众人物地图
{
表(“人”);
Id(x=>x.Id,m=>m.Generator(Generators.Native));
属性(x=>x.Name);
}
}
公共类JuridicalPersonMapping:JoinedSubclass映射
{
公共法人映射()
{
表(“法人”);
键(m=>m.Column(“person_id”);
属性(x=>x.LegalName);
}
}
公共类PrivatePersonMapping:JoinedSubclass映射
{
公私合营
{
表(“个人”);
键(m=>m.Column(“person_id”);
属性(x=>x.Sex);
}
}

您不需要在派生类中重复Id属性的声明。它是从父Person类继承而来的。

请看这里:查找“按代码映射”中所有与继承相关的选项。我知道这篇文章非常古老。但是你能告诉我数据库表应该是什么样子吗?