我正在使用带有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
属性,以便我可以将其专门设置为Inverse
,Not.OptimisticLock
等。我所做的任何事情似乎都没有任何区别。
答案 0 :(得分:0)
我们最终通过转移到每个请求的会话范例来对此进行排序。不知道为什么会出错或者为什么要修复它。我写了许多单元测试来尝试在更加受控制的环境中重现行为而没有成功。
无论如何,它现在有效。有很好的理由通常会将session-per-request作为在Web应用程序中管理NHibernate会话的最佳实践方法。