0

次のように言えますか?

var user = session.Get<IUser>(1);

IUser はインターフェイスであり、User という実装があります。User クラスは Users テーブルにマップされており、NHibernate で Get/Query を実行するときに、これをデフォルト タイプとして使用したいと考えています。

助けていただければ幸いです。

4

1 に答える 1

0

簡単な答えはノーです。NHibernateでは、具象クラスをマップして指定する必要があります。

ある種機能する結合サブクラスマッピングに関する長くて厄介な答えがあります。これにより、インターフェイスタイプをマッピングし、次にそのインターフェイスを実装するすべての具体的なタイプを永続化できますが、実際には提供されません。必要と思われるもの。これは、インターフェイスのプロパティをDBにマップし、指定されたデフォルトタイプを使用して、インターフェイスを満たす古いエンティティを取得/保存する機能です。

ある種のラッパーを記述ISessionして、やりたいことを実行できます。つまり、への呼び出しを変換しますwrapper.Get<IUser>(id)session.Get<User>(id)、基本的には、インターフェイスを使用する理由全体に反するIUserエイリアスであることに縛られます。Userそもそも。

(余談ですが、単にIoCの目的でインターフェースを使用していた場合、つまり、「通常の」操作でIUserと具象型の間に1対1のマッピングがあり、たとえば、テスト目的でモックされたユーザーがいる場合は、できることは、具体的なタイプを取得するためにIoCソリューションと通信する方法を知っているリポジトリの背後にNHibernateをラップし、それに応じて動作することです。暗黙的な変換のため、クエリは引き続き期待どおりに機能します。これを実行しましたが、機能します。少し厄介です。)

于 2012-09-12T15:19:37.520 に答える