假设我有这张表:
Users
ID PK
NAME
IS_REAL
我的前端程序(在互联网上)有这个课程
Class User
{
Int ID {get;set;}
string Name {get;set;}
}
我还希望为我的后端程序(在Intranet上)安排另一个课程
Class MUser : User
{
bool IsReal {get;set;}
}
有没有办法可以将我的映射用于User类,所以如果我的某个字段发生变化,我只需要在一个地方进行更改而不是重复映射?
提前致谢,
阿米尔。
编辑:
为了澄清,两个环境彼此断开连接,我只在一侧(内部网环境)有“Is_Real”属性
答案 0 :(得分:0)
http://nhibernate.info/doc/nh/en/index.html#inheritance-tableperconcreate-polymorphism
请注意,我们没有明确提及IPayment接口。 还要注意IPayment的属性映射在每个 子类。如果要避免重复,请考虑使用XML 实体(例如[] 在DOCTYPE声明和& allproperties中;在映射中。)
答案 1 :(得分:0)
这个想法是使用每个层次结构映射表。 但在这种情况下,您的表应该包含额外的Discriminator列,因此NHibernate可以使用Discriminator Value区分您的Domain类中的记录。
要做到这一点,请使用下面的代码:
public class UsersMap : ClassMapping<Users>
{
public UsersMap()
{
Table("Users");
Id(u => u.Id, args => args.Generator(Generators.Guid));
Property(u => u.Name, args => args.NotNullable(true));
Discriminator(t => {
t.Force(true);
t.Insert(true);
t.Length(32);
t.NotNullable(true);
t.Type(NHibernateUtil.String);
t.Column("Discriminator");
});
DiscriminatorValue("User");
}
}
public class MUserMap : SubclassMapping<MUser>
{
public MUserMap()
{
Property(u => u.IsReal, args => args.NotNullable(true));
DiscriminatorValue("MUser");
}
}