【问题标题】:Nhibernate updating version column on foreign key entity外键实体上的休眠更新版本列
【发布时间】:2013-06-18 18:41:10
【问题描述】:

我正在使用带有 Fluent NHibernate 和自动映射的 c#。

这里有一些代码(为了清楚起见被截断),然后我会解释问题。

public class Company
{
    public virtual string Description { get; set; }
}
public class Stock 
{
    public virtual Product Product { get; set; }
    public virtual Company Company { get; set; }
}

映射

mappings.Conventions.Add<CascadeConvention>()
    .Conventions.Add<CustomForeignKeyConvention>()
    .Conventions.Add<HasManyConvention>()
    .Conventions.Add<VersionConvention>()
  • CascadeConvention 只是将所有内容设置为 All。
  • CustomForeignKeyConvention 移除 NHibernate 通常使用的 _id 附加到外键 ID 列。
  • HasManyConvention 将所有 HasMany 设置为反转。
  • VersionConvention 转换如下:

    instance.Column("版本");

    instance.Default(1);

问题是当我插入新的股票记录时,Nhibernate 也会更新相关Company 上的版本号。 如果我在Company 上有一个IList&lt;Stock&gt; 属性,那将是有道理的,但我没有。

我已经做了很多阅读:

从这些中,我尝试了很多东西,包括在整个地方添加.Not.OptimisticLock()。我什至在Company 上添加了一个IList&lt;Stock&gt; 属性,以便我可以专门将其设置为InverseNot.OptimisticLock 等。我所做的似乎没有任何区别。

【问题讨论】:

    标签: c# fluent-nhibernate automapping


    【解决方案1】:

    我们最终通过迁移到 Session-per-request 范式来解决这个问题。不知道为什么会出错或为什么会修复它。我编写了许多单元测试来尝试在更受控的环境中重现行为,但没有成功。

    无论如何,它现在可以工作了。每个请求的会话通常被认为是在 Web 应用程序中管理 NHibernate 会话的最佳实践方式,这是有充分理由的。

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2013-07-24
      • 2012-08-21
      • 2020-02-16
      • 2019-06-22
      相关资源
      最近更新 更多