NHibernate.DuplicateMappingException - PullRequest
0 голосов
/ 11 ноября 2009

Я получаю NHibernate.DuplicateMappingException , которого я не понимаю. Приложение представляет собой простой менеджер проектов. Он содержит класс Project, который имеет свойство Notes типа ProjectNote. Вот сообщение об ошибке:

NHibernate.MappingException: Could not compile the mapping document: ProjectManager.Domain.Mapping.ProjectNote.hbm.xml ---> NHibernate.DuplicateMappingException: Duplicate class/entity mapping ProjectNote

Определения классов и файлы сопоставления воспроизводятся ниже.

Может кто-нибудь сказать мне, почему я получаю исключение дублирования карт? Спасибо.


using System.Collections.Generic;

namespace ProjectManager.Domain
{
    public class Project
    {
        #region Constructor

        public Project()
        {
            Initialize();
        }

        #endregion

        #region Properties

        /// <summary>
        /// The ID of this project.
        /// </summary>
        public virtual int ID { get; set; }

        /// <summary>
        /// The value used to sort this item in a Projects list.
        /// </summary>
        public virtual int Index { get; set; }

        /// <summary>
        /// The name of this project.
        /// </summary>
        public virtual string Name { get; set; }

        /// <summary>
        /// Notes for this project.
        /// </summary>
        public virtual IList<ProjectNote> Notes { get; set; }

        /// <summary>
        /// The tasks in this project.
        /// </summary>
        public virtual IList<Task> Tasks { get; set; }

        #endregion

        #region Private Methods

        /// <summary>
        /// Initializes this class.
        /// </summary>
        private void Initialize()
        {
            Tasks = new List<Task>();
            Notes = new List<ProjectNote>();
        }

        #endregion
    }
}

namespace ProjectManager.Domain
{
    public class ProjectNote
    {
        #region Properties

        /// <summary>
        /// 
        /// </summary>
        public virtual int ID { get; set; }

        /// <summary>
        /// The parent project of this note.
        /// </summary>
        public virtual Project Parent { get; set; }

        /// <summary>
        /// The text of the note
        /// </summary>
        public virtual string Text { get; set; }

        #endregion
    }
}

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   auto-import="true"
                   assembly="ProjectManager.Domain"
                   namespace="ProjectManager.Domain">

  <!-- Map class 'Project' -->
  <class name="Project" table="Projects">

    <!-- Identifier column -->
    <id name="ID" column="ID" type ="Int32" unsaved-value="0">
      <generator class="native" />
    </id>

    <!-- Simple properties -->
    <property name="Name" column="Name" type="String" not-null="true" />

    <!-- Collection properties: Parent-side -->
    <bag name="Tasks" table="Tasks" cascade="all-delete-orphan" inverse="true">
      <key column="ProjectID" />
      <one-to-many class="Task" />
    </bag>

    <bag name="Notes" table="ProjectNotes" cascade="all-delete-orphan" inverse="true">
      <key column="ProjectID" />
      <one-to-many class="ProjectNote" />
    </bag>


  </class>

</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   auto-import="true"
                   assembly="ProjectManager.Domain"
                   namespace="ProjectManager.Domain">

  <!-- Map class 'ProjectNote' -->
  <class name="ProjectNote" table="ProjectNotes">

    <!-- Identifier column -->
    <id name="ID" column="ID" type ="Int32" unsaved-value="0">
      <generator class="native" />
    </id>

    <!-- Simple properties -->
    <property name="Text" column="Text" type="String" />

    <!-- Collection properties: Child-side -->
    <many-to-one name="Parent" column="ProjectID" class="Project" />

  </class>

</hibernate-mapping>

1 Ответ

1 голос
/ 11 ноября 2009

Вы дважды сопоставили таблицу ProjectNotes. Один раз в сумку Project.Notes и снова в качестве основной таблицы для класса ProjectNote. Попробуйте удалить атрибут таблицы из вашего элемента, который отображает Project.Notes.

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