2009-07-21 9 views
1

私たちは、あるデータベースからデータを読み込んでそれを完全に異なるフォーマットに変換する翻訳アプリケーションを構築しています。私たちはNHibernateを使用してソースデータベースからまだ利用できないものを読み込みます。ソースオブジェクトをダミーにし、翻訳コアを通して渡し、出力を検証することによって、翻訳コアロジックをテストしたいと考えています。 NHibernate.LazyInitializationException:Initializing [Unavailable#] - コレクションを遅延して初期化できませんでした。セッションもセッションも閉じられていませんでした。(PersistentGenericBagとして宣言された)1対多コレクションにアイテムを追加しようとするたびに、誰かがこれに取り組んでいますか?セッションなしのNHibernate

private PersistentGenericBag<Child> _Children = null; 
[NHibernate.Mapping.Attributes.Bag(1, Name = "Children", Table = "Children", Lazy = CollectionLazy.False, Cascade = "all")] 
[NHibernate.Mapping.Attributes.Key(2)] 
[NHibernate.Mapping.Attributes.Column(3, Name = "ParentId")] 
[NHibernate.Mapping.Attributes.OneToMany(4, ClassType = typeof(Child))] 
public virtual PersistentGenericBag<Child> Children 
{ 
    get 
    { 
     if (_Children == null) 
     { 
      _Children = new PersistentGenericBag<Child>(); 
     } 
     return _Children; 
    } 
    set { _Children = value; } 
} 


[TestMethod] 
public void Xyz() 
{ 
    Parent parent = new Parent(); 
    parent.Children.Add(new Child()); //exception thrown here 
    Assert.AreEqual(parent.Children.Count, 1); 
} 
+2

PersistentGenericBagを使用しますか?通常、IList またはISet のようにプロパティを宣言するだけです。 PersistentGenericBagは通常、NHibernateの内部にあります。 –

+0

^^こちらNHibernateの強みは、POCOオブジェクトを使用しています。 NHibernateライブラリを参照する必要もなく、トランザクション層をテストするための標準オブジェクトを作成することができます。 – anonymous

答えて

2

私はmauschに同意する、あなたの代わりにNHibernateはコレクションのドメイン・モデルでのIListのような標準の.NETコレクションの要素に固執してみ使用する必要があります。

これを行うと、NHibernateに問題を起こすことなく、コレクションから項目を追加したり削除したりできるようになります。

関連する問題