NHibernate映射两个表之间的多个关系

时间:2014-06-16 13:01:38

标签: c# nhibernate fluent-nhibernate

我有一个恼人的问题。我有两个在两个不同列上相关的对象。关系是相同的(两者都是一个),结构如下

品牌表

ID
名称
[其他东西]

CATEGORY表

ID
名称
BrandID(FK到品牌。导航名称品牌)
DynamicBrandID(FK到Brand。导航名称DynamicBrands
[其他东西]

但无论我尝试什么,我都无法在NHibernate中使用它。 HBM文件看起来像是为两个对象正确生成但无论我尝试什么,每次我想插入类别时我都会收到错误。

我的第一个问题 - 我在尝试NHibernate无法应对的事情吗?它是一个遗留数据库,所以如果是这样,那么我就会遇到更大的问题。

其次 - 出了什么问题?我得到了一个错误:

{"这个SqlParameterCollection的索引26无效,Count = 26。"} - 我根本无法深入研究,所以我有点失明

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

虽然您的地图文件不足,但我敢打赌问题很明显:加倍映射。当我们对一列有两个代表时,经常会发生这种情况:

public virtual int   BrandID { get; set }
public virtual Brand Brand   { get; set }

xml映射看起来像:

<property    name="BrandID" column="BrandID" /> 
<many-to-one name="Brand"   column="BrandID" class="Brand" />

这是错误的,因为在生成SQL语句时,在一列 "BrandID" 中有两个插入。但是有一个解决方案,使其中一个映射 readonly 。通常int(BrandID)是更好的选择,因为我们仍然可以从ORM中获利:

<property    name="BrandID" column="BrandID" insert="false" update="false"/> 
<many-to-one name="Brand"   column="BrandID" class="Brand" />

所以,检查你的流利,并按照这样做:

References(x => x.Brand, "BrandID");
Map(x => x.BrandID, "BrandID")
  .Not.Insert()
  .Not.Update()
  ;

同时检查Error is coming while saving data with many to one mapping in nhibernate