Nhibernate更新外键实体的版本列

时间:2013-06-21 15:04:52

标签: c# fluent-nhibernate automapping

我正在使用带有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只需将所有内容设置为全部。
  • CustomForeignKeyConvention删除了NHibernate通常的_id 附加到外键id列。
  • HasManyConvention将所有HasMany设置为反向。
  • VersionConvention convertion如下所示:

    instance.Column( “版本”);

    instance.Default(1);

问题在于,当我插入新的库存记录时,Nhibernate还会更新相关Company上的版本号。 如果我在IList<Stock>上有一个Company属性,那么这是有意义的,但我没有。

我做了很多阅读:

通过这些,我尝试了很多东西,包括在整个地方添加.Not.OptimisticLock()。我甚至在IList<Stock>上添加了Company属性,以便我可以将其专门设置为InverseNot.OptimisticLock等。我所做的任何事情似乎都没有任何区别。

1 个答案:

答案 0 :(得分:0)

我们最终通过转移到每个请求的会话范例来对此进行排序。不知道为什么会出错或者为什么要修复它。我写了许多单元测试来尝试在更加受控制的环境中重现行为而没有成功。

无论如何,它现在有效。有很好的理由通常会将session-per-request作为在Web应用程序中管理NHibernate会话的最佳实践方法。