c# - 用属性休眠多对多
问题描述
嘿,我需要 NHibernate 中多对多关系的帮助,我收到此错误:
NHibernate.MappingException: Unable to build the insert statement for class SelfHost.Core.Repository.implementation.HibernateProduktHaendler: a failure occured when adding the Id of the class ---> System.ArgumentException: The column 'Produkt_P_ID' has already been added in this SQL builder (Parameter 'columnName')
我有 3 个表 produkt、Haendler 和 ProduktHaendler,ProduktHaendler 同时将 Haendler_H_ID 作为主键和外键,同时将 Produkt_P_ID 作为主键和外键(我认为这是问题所在)
这是我的班级 Prdoukthaendler 和映射
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SelfHost.Core.Repository.implementation
{
public class HibernateProduktHaendler
{
public virtual HibernateProdukt Produkt_P_ID { set;get; }
public virtual string ProduktURL { set; get; }
public virtual HibernateHaendler Haendler_H_ID { set; get; }
public override bool Equals(object obj)
{
if (obj == null)
return false;
HibernateProduktHaendler id;
id = (HibernateProduktHaendler)obj;
if (id == null)
return false;
if (Produkt_P_ID == id.Produkt_P_ID && Haendler_H_ID == id.Haendler_H_ID)
return true;
return false;
}
public override int GetHashCode()
{
return (Produkt_P_ID + "|" +Haendler_H_ID).GetHashCode();
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="SelfHost"
namespace="SelfHost.Core.Repository.implementation">
<class name="HibernateProduktHaendler" table="ProduktHaendler">
<id class="HibernateProduktHaendler">
<key-property name="Produkt_P_ID" type="int"></key-property>
<key-property name="Haendler_H_ID" type="int"></key-property>
</id>
<property name="ProduktURL" />
<many-to-one name="Produkt_P_ID" ></many-to-one>
<many-to-one name="Haendler_H_ID" ></many-to-one>
</class>
</hibernate-mapping>
解决方案
我相信您正在寻找的是复合ID映射。您不需要其他多对一映射。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="SelfHost"
namespace="SelfHost.Core.Repository.implementation">
<class name="HibernateProduktHaendler" table="ProduktHaendler">
<composite-id>
<key-many-to-one name="Produkt_P_ID" />
<key-many-to-one name="Haendler_H_ID" />
</composite-id>
<property name="ProduktURL" />
</class>
</hibernate-mapping>
推荐阅读
- android-studio - 尝试从类获取计算结果到主活动 onclick 方法以设置文本字段时 onClick 方法执行错误
- javascript - 处理 Knex pg 数据库错误的正确方法是什么
- vue.js - $router.push 未在单元测试中触发
- xamarin - Xamarin Visual Studio 2019 无法识别小米9t pro
- keras - ImportError:无法从“keras.layers”导入名称“K”
- deprecated - 需要帮助在 PHP 7.2 中转换已弃用的函数 create_function()
- ms-access - 使用 Delphi 将 dbf 文件的记录插入 MS Access 数据库中的表中
- java - 如何在 DJL(Deep Java Library)中调用自定义 mxnet 运算符?
- kotlin - 以编程方式添加时 MaterialCardView 不显示
- python - 如何绕过元素树不匹配标签错误?