我想使用流畅的nhibernate或nhibernate本身(我的意思是hbm文件)来组合每个类的表和每个层次的表策略,但我不知道如何。我更喜欢流利于hbm,但如果不可能,那么hbm也没关系。我通过将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使用每个类的表策略,并为Person使用每个层次的表策略SystemUser类。数据库结构是这样的:
EntityTable(ID(PK),Name)
PersonTable(EntityID(PK,FK),Phone,Password)
任何帮助表示感谢。
答案 0 :(得分: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);
}
}