1

我对 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()。

干杯。

4

3 回答 3

3

嗨,我弄清楚了收藏没有被持久化的原因。我的工作单元是调用一个属性,该属性返回一个 Isession 对象来持久化我的对象。然而,这个属性实际上为每次调用返回了一个新的 ISession。因为我更正了这一点以在每个工作单元中使用相同的 ISession,所以对象被正确地持久化了。感谢您的所有帮助。

于 2008-12-19T13:57:22.363 回答
2

查看集合映射上的级联属性 - 默认情况下,该属性设置为“无”,这意味着需要显式保存子实体。您可能想要 cascade="all" 或 cascade="all-delete-orphan"。

于 2008-12-19T03:30:20.637 回答
0

您在轮胎列表的刷新和提交之前使用 NHibernate.ISession.save(object) 吗?

于 2008-12-19T12:47:49.523 回答