我正在使用带有 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
将 all 设置HasMany
为反转。VersionConvention
转换如下所示:instance.Column("版本");
instance.Default(1);
问题是当我插入新的股票记录时,Nhibernate 也会更新相关的Company
. 如果我在那上面有IList<Stock>
房产,Company
那将是有道理的,但我没有。
我已经做了很多阅读:
- NHibernate 发出无关的更新语句,而不管关系上的正确 Inverse (fluent nhibernate) 设置如何
- NHibernate 和版本列中的级联保存更新
- NHibernate 参考 - 第 17 章。示例:父/子
- Ayende @ Rahien - NHibernate 映射
从这些中,我尝试了很多东西,包括到处添加.Not.OptimisticLock()
。我什至在 on 上添加了一个IList<Stock>
属性,Company
以便我可以专门将其设置为Inverse
,Not.OptimisticLock
等。我所做的一切似乎都没有任何区别。