1

我想使用流利的 nhibernate 或 nhibernate 本身(我的意思是 hbm 文件)组合每类表和每层次表策略,但我不知道如何。我更喜欢流利而不是 hbm,但如果不可能,那么 hbm 也可以。我通过在 fluent 中引入 Entity 作为 ClassMap 和所有其他作为 SubClassMap 来测试这一点,但是在 fluent 生成的 hbm 文件中,Entity 是一个类,而所有其他都是连接类,这不是我想要的。我将在下面更详细地描述这个问题。

类层次结构:

    public class Entity
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public abstract class Person : Entity
{
    public string Phone { get; set; }
}

public class SystemUser : Person
{
    public string Password { get; set; }
}

我想为实体创建一张表,为人员及其所有类型(所有子类)创建一张表。我的意思是,我想对实体使用每类表策略,对 Person 和 SystemUser 类使用每层次表策略。数据库结构是这样的:

EntityTable(ID(PK),Name)
PersonTable(EntityID(PK,FK),Phone,Password)    

任何帮助表示赞赏。

4

1 回答 1

0

如果 EntityTable Id 不是数据库生成的(无论如何 NH 都不鼓励),你可以使用这个技巧

public PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Table("PersonTable");

        Id(p => p.Id, "EntityID").GeneratedBy.HiLo("100");

        DiscriminateSubClassesOnColumn("PersonType");

        Map(x => x.Phone);

        Join("EntityTable", join =>
        {
            join.KeyColumn("ID");
            join.Map(p => p.Name);
        });
    }
}


public SystemUserMap : SubclassMap<SystemUser>
{
    public SystemUserMap()
    {
        Map(x => x.Password);
    }
}
于 2011-12-21T12:30:32.537 回答