NHibernate映射两个表之间的多个关系
本文关键字:之间 关系 映射 NHibernate 两个 | 更新日期: 2023-09-27 18:08:44
我有一个恼人的问题。我有两个物体,它们在两个不同的列上相关。关系是相同的(都是one-Many),结构如下
< 品牌表/strong>
ID
名称
(其他东西)
类别表/strong>
ID
名称
Brand(品牌)导航名称(品牌)
dynamic Brand(动态品牌)导航名称DynamicBrands
(其他东西)
但是不管我怎么尝试,我都不能在NHibernate中工作。HBM文件看起来已经为这两个对象正确地生成了,但无论我如何尝试,每次我想插入到类别中时都会得到一个错误。
我的第一个问题-我正在尝试一些NHibernate无法处理的东西吗?这是一个遗留数据库,所以如果是这种情况,那么我有更大的问题。
第二-出什么事了?我得到一个错误沿着行:
{" Count=26的SqlParameterCollection索引26无效。"} -我不能再深入研究了,所以我有点瞎了
谢谢你的帮助
虽然缺少映射文件,但我敢打赌问题很清楚:加倍了映射。当我们有一列的两种表示形式时,通常会发生这种情况:
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"
。但是有一个解决方案,使这些映射中的一个只读。通常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()
;