将两个类映射到不同环境中的同一表
本文关键字:环境 映射 两个 | 更新日期: 2023-09-27 18:36:24
假设我有这个表:
Users
ID PK
NAME
IS_REAL
我的前端程序有这个课程(在互联网上)
Class User
{
Int ID {get;set;}
string Name {get;set;}
}
我还想为我的后端程序提供另一个类(在内部网上)
Class MUser : User
{
bool IsReal {get;set;}
}
有没有办法将我的映射用于用户类,因此,如果我的一个字段发生更改,我只需要在一个地方进行更改,而不是复制映射?
提前感谢,
阿米尔。
编辑:
只是为了澄清,这两个环境彼此断开连接,我只有一侧的"Is_Real"属性(内部网环境)
这个想法是使用每个层次结构映射的表。但在这种情况下,您的表应包含额外的鉴别器列,因此 NHibernate 可以使用鉴别器值按域类区分数据库中的记录。
为此,请使用类似于以下代码的内容:
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");
}
}
http://nhibernate.info/doc/nh/en/index.html#inheritance-tableperconcreate-polymorphism
请注意,我们没有在任何地方明确提到 IPayment 接口。 另请注意,IPayment 的属性映射在每个 子。如果要避免重复,请考虑使用 XML 实体(例如 [ ] 在 DOCTYPE 声明和 &allproperties; 在映射中)。