0

このテーブルがあるとしましょう:

Users
ID PK
NAME
IS_REAL

そして、フロントエンドプログラム用にこのクラスを持っています(インターネット上)

Class User
{
    Int ID {get;set;}
    string Name {get;set;}
}

また、バックエンド プログラム用に別のクラスを用意したい (イントラネット上)

Class MUser : User
{
    bool IsReal {get;set;}
}

ユーザー クラスのマッピングを使用する方法はありますか? フィールドの 1 つが変更された場合、マッピングを複製する代わりに 1 か所だけ変更する必要がありますか?

前もってありがとう、
アミール。

編集:

明確にするために、2 つの環境は互いに切断されており、「Is_Real」プロパティは一方の側 (イントラネット環境) にのみあります。

4

2 に答える 2

0

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

IPayment インターフェイスについて明示的に言及していないことに注意してください。IPayment のプロパティが各サブクラスにマップされていることにも注意してください。重複を避けたい場合は、XML エンティティの使用を検討してください (たとえば、DOCTYPE 宣言の [ ] やマッピングの &allproperties; など)。

于 2012-06-07T07:22:42.763 に答える
0

アイデアは、階層マッピングごとにテーブルを使用することです。ただし、この場合、テーブルに追加の Discriminator 列を含める必要があるため、NHibernate は Discriminator Value を使用してドメイン クラスによって 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 に答える