我有一个恼人的问题。我有两个在两个不同列上相关的对象。关系是相同的(两者都是一个),结构如下
品牌表
ID
名称
[其他东西]
CATEGORY表
ID
名称
BrandID(FK到品牌。导航名称品牌)
DynamicBrandID(FK到Brand。导航名称DynamicBrands
[其他东西]
但无论我尝试什么,我都无法在NHibernate中使用它。 HBM文件看起来像是为两个对象正确生成但无论我尝试什么,每次我想插入类别时我都会收到错误。
我的第一个问题 - 我在尝试NHibernate无法应对的事情吗?它是一个遗留数据库,所以如果是这样,那么我就会遇到更大的问题。
其次 - 出了什么问题?我得到了一个错误:
{"这个SqlParameterCollection的索引26无效,Count = 26。"} - 我根本无法深入研究,所以我有点失明
感谢您的帮助
答案 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