-1

他のすべてのドメインクラスが継承するBaseEntityがあります。このBaseEntityには、いくつかの基本的なプロパティがあります。DateLastChangeこれは、たとえばのようなものである可能性があります。

hbmマッピングファイルでNHibernateを使用しています。DateLastChangeすべてのマッピングファイルにマッピングする必要がないようにしています。

Ayendeによるこの投稿を見つけたので、これunion-subclassを達成するために使用できると思います(彼の最後のアプローチを参照)。ただし、彼のテーブルスキーマにはない抽象クラスのテーブル名が含まれています。

<class name="Party"
    abstract="true"
    table="Parties">
...

テーブルが存在する必要がありますか、それともNHibernateはこの属性を無視しますか?そして、それを省略できますか?

4

2 に答える 2

0

これは必要ありません。ドキュメントによると( kalkiに感謝):

<class name="Payment">
    <id name="id" type="long" column="PAYMENT_ID">
        <generator class="sequence"/>
    </id>
    <property name="amount" column="AMOUNT"/>
    ...
    <union-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
        <property name="creditCardType" column="CCTYPE"/>
        ...
    </union-subclass>
    <union-subclass name="CashPayment" table="CASH_PAYMENT">
        ...
    </union-subclass>
    <union-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
        ...
    </union-subclass>
</class>

と:

スーパークラスがabstractの場合は、abstract="true"でマップします。抽象的でない場合は、スーパークラスのインスタンスを保持するために追加のテーブル(上記の例ではデフォルトでPAYMENT)が必要です。

于 2012-05-29T07:49:59.930 に答える
-1

私はfluentnhibernateに次の抽象クラスを持っています:

    public abstract class EntityMapping<TEntity> : ClassMap<TEntity> where TEntity : EntityBase
        {
            protected EntityMapping()
            {
                Id(x => x.Id, "Id")
                    .UnsavedValue("00000000-0000-0000-0000-000000000000")
                    .GeneratedBy.GuidComb()
                    .Index("IX_Lookup");
                OptimisticLock.Version();
                Version(x => x.Version);
Map(x=>x.DateLastChange); // your column
            }
        }

他のすべてのマッピングは抽象クラスを使用します。

public SomeEntityMap:EntityMapping<SomeEntity>{
   public SomeEntityMap(){
      Map(x=>x.SomeProperty);
   }
}
于 2012-05-24T14:53:40.403 に答える