【问题标题】:NHibernate not persisting collectionsNHibernate 不持久化集合
【发布时间】:2008-12-19 02:14:52
【问题描述】:

我在使用 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()。

干杯。

【问题讨论】:

  • 如何将轮胎映射到汽车?

标签: nhibernate ado.net isession


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我遇到了类似的问题,cascade="all" 为我解决了问题
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      相关资源
      最近更新 更多