C# 没有会议的NHibernate

C# 没有会议的NHibernate,c#,.net,nhibernate,disconnected-session,C#,.net,Nhibernate,Disconnected Session,我们正在构建一个翻译应用程序,它从一个数据库中读取数据并将其翻译成完全不同的格式。我们将使用NHibernate从尚未可用的源数据库中读取。我们想要测试翻译核心逻辑,方法是:生成一个源对象,将其传递给我们的翻译核心,并验证输出。每次尝试向一对多集合(声明为PersistentGenericBag)添加项时,我们都会得到NHibernate.LazyInitializationException:Initializing[Unavailable#]-未能延迟初始化集合,没有关闭任何会话或会话。有人

我们正在构建一个翻译应用程序,它从一个数据库中读取数据并将其翻译成完全不同的格式。我们将使用NHibernate从尚未可用的源数据库中读取。我们想要测试翻译核心逻辑,方法是:生成一个源对象,将其传递给我们的翻译核心,并验证输出。每次尝试向一对多集合(声明为PersistentGenericBag)添加项时,我们都会得到NHibernate.LazyInitializationException:Initializing[Unavailable#]-未能延迟初始化集合,没有关闭任何会话或会话。有人解决过这个问题吗

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);
}
private PersistentGenericBag\u 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))]
公共虚拟PersistentGenericBag子级
{
得到
{
if(_Children==null)
{
_Children=新的PersistentGenericBag();
}
返回儿童;
}
设置{u Children=value;}
}
[测试方法]
公共void Xyz()
{
父项=新父项();
parent.Children.Add(new Child());//此处引发异常
Assert.AreEqual(parent.Children.Count,1);
}

我同意mausch的观点,您应该在域模型中使用标准的.Net集合元素,如IList,而不是NHibernate集合


完成此操作后,您应该能够从集合中添加和删除项目,而不会与NHibernate产生任何问题。

您确定要使用PersistentGenericBag吗?通常,您只需将属性声明为IList或ISet。PersistentGenericBag通常位于NHibernate的内部。NHibernate的强度使用POCO对象。您应该能够创建一个标准对象来测试事务层,而无需引用NHibernate libs。