将两个类映射到不同环境中的同一表

本文关键字:环境 映射 两个 | 更新日期: 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; 在映射中)。