0

假设我有这张表:

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”属性(内网环境)

4

2 回答 2

0

http://nhibernate.info/doc/nh/en/index.html#inheritance-tableperconcreate-polymorphism

Notice that nowhere do we mention the IPayment interface explicitly. Also notice that properties of IPayment are mapped in each of the subclasses. If you want to avoid duplication, consider using XML entities (e.g. [ ] in the DOCTYPE declartion and &allproperties; in the mapping).

于 2012-06-07T07:22:42.763 回答
0

这个想法是使用每个层次结构映射的表。但在这种情况下,您的表应该包含额外的鉴别器列,因此 NHibernate 可以使用鉴别器值通过您的域类区分 DB 中的记录。

为此,请使用以下代码:

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");
        }
}
于 2012-06-07T07:33:44.370 回答