0

インターフェイスと、このインターフェイスを実装するクラスがあります。

public interface IPhase {
    string Description { get; set; }
    int Id { get; }
    string Phase { get; set; }
}

public class Phase : IPhase {
    // Implementation here...
}

ここで、NHibernate 2.1.2.GAを使用して、クラスごとのテーブル階層を使用してインターフェイスとその実装者をマップしたいと思います。実際、この実装者が永続化される唯一のクラスになるため、識別子は必要ありません。この表で。私はNHibernateを約1年半使用していませんが、ここでいくつかのメモリブランクに苦しんでいます...

FNHを使用していないことを除いて、関連するこの質問と回答を読みました。
NHibernateマッピング:識別子なしで階層を単一のテーブルに保存

  1. discriminator使用中に属性が必須かどうか疑問に思いますかsubclass

  2. この特定のコンテキストでのXMLマッピングはどのようになりますか?

よろしくお願いします!

4

1 に答える 1

5

もちろん、NHibernateには、クラス階層ごとのテーブルのマッピング用の識別子が必要です。それ以外の場合、データベースから行を取得するときに、さまざまなサブクラスをどのように識別する必要がありますか?

インターフェイスの実装が1つしかない場合、なぜそれをマップする必要がありますか?クラスを通常のエンティティとしてマップするだけです(継承なし)。

編集:マッピングにインターフェースへの参照がある可能性があることを忘れました。その場合、abstract="true"ここで説明されているように、基本クラス(インターフェイス)をマークするtable-per-concrete-classマッピングを試すことができます:http://nhibernate.info/doc/nh/en/index.html#inheritance-tableperconcrete

于 2011-05-11T09:13:09.860 に答える