0

遅延ロード用に設定されたオブジェクトにプロパティをロードする必要があります。NhibernateUtil.Initialize() を使用してアクセスまたはロードしようとすると、同じエラーが発生します。

"Initializing[ProjectName.Logic.Entities.AddressList#9] - プロキシを初期化できませんでした - セッションがありません。"

「using」句でセッションを開くために必要なメソッドを呼び出すことで、セッションが存在することを確認できます。(「true」のパラメーターを使用してリポジトリ オブジェクトをインスタンス化すると、必要に応じてセッション ファクトリも作成され、セッションが開かれるように、セッションの作成を埋めました。「using」句でトリガーされるブレークポイントで検証されます。)

foreach (MemberViewModel MVM in _filteredMemberViewModels)
           {
               foreach (Detail Mailings in MVM.Member.Mailings)  
               {
                   //used for lazy loading
                   using (var repo = new AddressListRepository(true))
                   {
                       NHibernateUtil.Initialize(Mailings.AddressList);
                   }
               }
           }

詳細マッピング:

public class DetailMap : ClassMap<Detail>
{
    public DetailMap()
    {
        Table("AddressDetailsCCN");

        // Unique Identifier
        Id(x => x.Id, "Id")
            .GeneratedBy.Identity();

        // MANY TO ONE relationship (the list has many details)
        References<AddressList>(x => x.AddressList, "ListId")
            .LazyLoad()
            .Not.Nullable()
            .Cascade.None();

        // MANY TO ONE relationship (Members have details)
        References<Member>(x => x.Member, "MemberId")
            .Not.LazyLoad()
            .Not.Nullable();

        // First line of Address
        Map(x => x.Address, "Address")
            .Nullable();

        // Second line of Address
        Map(x => x.Address2, "Address2")
            .Nullable();

        // City
        Map(x => x.City, "City")
            .Nullable();

        // State
        Map(x => x.State, "State")
            .Nullable();

        // Zip
        Map(x => x.Zip, "Zip")
            .Nullable();

        // Finalized date
        Map(x => x.FinalizedDate, "FinalizedDate")
            .CustomType(typeof(DateTime))
            .Nullable();

        // Date the list is created by
        Map(x => x.CreatedDate, "CreatedDate")
            .CustomType(typeof(DateTime))
            .Not.Nullable();
    }
}
4

1 に答える 1

2

Mailings オブジェクトのプロパティを初期化する前に、セッションに Mailings オブジェクトをアタッチする必要があります。そのためには、次のメソッドをリポジトリで公開する必要があります。

session.Lock(entity, LockMode.None);

これにより、エンティティ (Mailings) がセッションに関連付けられ、NHibernateUtil.Initialize(Mailings.AddressList) の呼び出しが機能するはずです。

ただし、なぜこのようにする必要があるのか​​を再検討し、より粗いセッションを検討することをお勧めします (つまり、以前に開き、後で閉じます)。

于 2012-05-31T18:20:24.970 に答える