2

我正在使用带有 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那将是有道理的,但我没有。

我已经做了很多阅读:

从这些中,我尝试了很多东西,包括到处添加.Not.OptimisticLock()。我什至在 on 上添加了一个IList<Stock>属性,Company以便我可以专门将其设置为Inverse,Not.OptimisticLock等。我所做的一切似乎都没有任何区别。

4

1 回答 1

0

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

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

于 2013-07-05T08:38:11.250 回答