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无效。"} -我不能再深入研究了,所以我有点瞎了

谢谢你的帮助

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

虽然缺少映射文件,但我敢打赌问题很清楚:加倍了映射。当我们有一列的两种表示形式时,通常会发生这种情况:

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()
  ;

在nhibernate

中保存多对一映射的数据时也会出现错误