NHibernate Дублирующая проблема сопоставления класса / сущности - PullRequest
4 голосов
/ 12 сентября 2010

Я начал набег на C # .NET и NHibernate, и, наконец, застрял в исключении, которое я не могу понять, и Google не помогает.

Я получаю NHibernate.DuplicateMappingException: дублирование сопоставления класса / сущности в моем родительском классе. Ниже приведен мой файл сопоставления для класса Parent и класса Youth, который использует класс Parent:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Surrix.Cerberus.YouthData"
                   namespace="Surrix.Cerberus.YouthData.Domain">
  <class name="Parent">
    <id name="parentId">
      <generator class="guid" />
    </id>
    <property name="firstName" not-null="true" />
    <property name="lastName" not-null="true" />
    <property name="homePhone" />
    <property name="parentEmail" />
    <property name="relationshipToYouth" />

    <!-- Address component that should map to the Address class -->
    <component name="parentAddress">
      <property name="street" />
      <property name="state" />
      <property name="zipCode" />
      <property name="city" />
    </component>

  </class>

</hibernate-mapping>

А вот и соответствующие части молодежного класса (он значительно больше)

<set name="YouthParents" table="YouthParents" cascade="none">
  <key column="youthId" />
  <many-to-many column="parentId" class="Parent"/>
</set>

Единственное, что у класса Youth также есть свойства firstName и lastName, но я не вижу в этом проблемы.

Ответы [ 5 ]

14 голосов
/ 30 октября 2010

Убедитесь, что вы не делаете обе из этих двух вещей.

(1) добавление сборки в коде :

// Code Configuration
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(Employee).Assembly); 
// Presuming Employee resides in "MyAssembly" as seen below.

(2) И затем также добавление сборки в файл конфигурации :

<!-- .config configuration -->
<session-factory>
     <!-- bunch of other stuff -->
    <mapping assembly="MyAssembly"/> <!-- as in MyAssembly.dll -->
</session-factory>
7 голосов
/ 12 сентября 2010

Вы добавляете файл или сборку, содержащую сопоставление, дважды в объект конфигурации.

2 голосов
/ 11 апреля 2011

У меня была эта проблема, и я решил ее, поместив эту инструкцию в hibernate.cfg.xml файл:

<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
1 голос
/ 08 октября 2012

Другая возможная причина возникновения этой ошибки - несколько файлов hbm, ссылающихся на одну и ту же сборку во время Configuration.AddAssembly.

Все файлы hbm в одной сборке обрабатываются одним вызовом AddAssembly.

0 голосов
/ 12 сентября 2010

Поскольку он дает двойное сопоставление сущностей классов, я могу только представить, что у вас есть два или более файлов * .xml.hbm, ссылающихся на один и тот же класс .net.

Убедитесь, что элемент класса xml для вашегоКласс молодежи не имеет того же значения для атрибута имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...