【问题标题】:Nhibernate many to many with property用属性休眠多对多
【发布时间】:2021-09-03 14:56:30
【问题描述】:

嘿,我需要 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>

【问题讨论】:

    标签: c# sql hibernate nhibernate many-to-many


    【解决方案1】:

    我相信您正在寻找的是composite-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>
    

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 2012-03-01
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      相关资源
      最近更新 更多