【发布时间】: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<Stock> 属性,那将是有道理的,但我没有。
我已经做了很多阅读:
- NHibernate emitting extraneous update statements regardless of proper Inverse (fluent nhibernate) settings on relations
- Cascade Save-Update in NHibernate and version column
- NHibernate Reference - Chapter 17. Example: Parent/Child
- Ayende @ Rahien - NHibernate Mapping
从这些中,我尝试了很多东西,包括在整个地方添加.Not.OptimisticLock()。我什至在Company 上添加了一个IList<Stock> 属性,以便我可以专门将其设置为Inverse、Not.OptimisticLock 等。我所做的似乎没有任何区别。
【问题讨论】:
标签: c# fluent-nhibernate automapping