3

私のアプリでは、特定のユーザーについて、そのユーザーに属するオブジェクトの各インスタンスの「設定」を取得できるように、3項辞書マッピングを設定しました。つまり、私は次のようなものを持っています:

public class User
{
    public virtual IDictionary<Baz, BazSettings> BazSettings { get; set; }

    //...

したがって、Bazオブジェクトがあるときはいつでも、を介して現在のユーザーのbaz設定を検索できますcurrentUser.BazSettings[baz]

ステートレスセッションを使用してこれを実行できるようにしたいのですが、次のLazyInitializationExceptionコードでを取得します。

//int bazId;
using (IStatelessSession session = Global.SessionFactory.OpenStatelessSession())
{
    var currentUser = session.Get<User>(Membership.GetUser().ProviderUserKey);
    var baz = session.Get<Baz>(bazId);
    var bazSettings = currentUser.BazSettings[baz]; // raises `LazyInitializationException`

代わりにを使用するISessionと、問題は解決します。

完全なNHibernateエラーメッセージには、「セッションまたはセッションが閉じられていません」というテキストが含まれています。ステートレスセッションを使用する場合、エンティティはセッションに接続されないため、これは理にかなっています。ただし、ステートレスセッションを使用してこのルックアップを実行する方法があると思います。

ステートレスセッションを使用してルックアップを実行するにはどうすればよいcurrentUser.BazSettings[baz]ですか?

4

2 に答える 2

0

ステートレスセッションを使用して実行された操作は関連付けられたインスタンスにカスケードされず、コレクションはステートレスセッションによって無視されるため、IStatelessSessionの代わりにISessionを使用する必要があります。

于 2011-01-24T00:38:45.330 に答える
0

ステートレスセッションは、ステートレスであるという理由だけで遅延読み込みをサポートしていません。ステートレスセッションでは、取得したエンティティについて何も追跡しません。

それを機能させる唯一の方法は、コレクションを積極的にロードすることです。しかし、ステートレスセッションが明らかに必要なものを提供しないのに、なぜステートレスセッションを使用したいのでしょうか。

于 2011-01-24T14:31:25.313 に答える