我对NHibernate有一个相当奇怪的错误。我遇到错误,ISession被跨线程共享,并通过提供我自己的ADO.NET连接解决了这个问题:
IDbConnection connection = new SqlConnection(ApplicationConfiguration.ConnectionString);
connection.Open();
ISession session = _sessionFactory.OpenSession(connection);
session.FlushMode = FlushMode.Commit;
return session;
我的应用程序现在可以正常运行,但所有带有集合的对象都是在没有集合的情况下保存在数据库中例如,假设一辆汽车有轮胎清单。然后我创建一辆汽车,然后根据数据库中已有的轮胎生成一个轮胎列表。保存汽车对象只会保存汽车而不是列表!
对我做错的任何帮助?我正在使用NHibernate 2.0,我会调用Session.Flush()和Transaction.Commit()。
欢呼声。
答案 0 :(得分:3)
嗨,我想出了为什么收藏品没有被保留的原因。我的工作单元是调用一个属性,该属性返回一个Isession对象来保存我的对象。但是,此属性实际上为每个调用返回了一个新的ISession。我纠正了这一点,在每个工作单元中使用相同的ISession,对象被正确地保留。谢谢你的帮助。
答案 1 :(得分:2)
检查集合映射上的cascade属性 - 默认情况下,此属性设置为“none”,这意味着需要明确保存子实体。你可能想要cascade =“all”或cascade =“all-delete-orphan”。
答案 2 :(得分:0)
你是否在冲洗和提交轮胎清单之前使用NHibernate.ISession.save(对象)?