1

NHibernateでマップされた2つのクラスがあります。クラスアプリケーションは、プロパティStoreIdを持つクラスStoreを参照します。アプリケーションユーザーにはIDIDがあり、クラスStoreにはIDが割り当てられていますが、この場合はそれが問題になるとは思いません。

ApplicationUserマッピング:

<many-to-one name="Store" column="StoreId" class="Store" />

ストアマッピング:

<many-to-one name="ApplicationUser" column="Id" class="ApplicationUser" 
    property-ref="Store" insert="false" update="false" 
    fetch="join" outer-join="true" />

すべてのストアをロードすると、期待どおりにApplicationUserに対して左外部結合が生成されますが、オブジェクトグラフを作成するときに、NHibernateはSELECT ... FROM ApplicationUser WHERE StoreId = ?ApplicationUserを参照しないすべてのストアに対して追加を行うことを決定します。

これらのApplicationUserが存在しないことをすでに知っているはずなので、これは大規模なやり過ぎであり、まったく不要です。

NHibernateがこれらの余分なクエリを生成するのを防ぐ方法を知っている人はいますか?

編集:

クラスは次のように非常に基本的です。

public class Store
{
    public virtual int Id { get; set; }
    // ...
    public virtual ApplicationUser ApplicationUser { get; set; }
}

public class ApplicationUser
{
    public virtual int Id { get; set; }
    // ...
    public virtual Store Store { get; set; }
}
4

1 に答える 1

0

ここで起こっていることは、それぞれが「多対1」として指定されているため、nHibernateが両方のコレクションをロードしようとしていることだと思います...マッピングを変更する以外にできることはないと思います...

したがって、a->xbおよびb->xaの場合、nHibernateは両方の関係を照会するというのが私の理解です...私には理にかなっています。

コレクションを必要としない場合は、クエリに含めることはできず、遅延読み込みに依存することはできません。

于 2011-05-05T21:35:39.943 に答える