Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate.DuplicateMappingException_Nhibernate - Fatal编程技术网

NHibernate.DuplicateMappingException

NHibernate.DuplicateMappingException,nhibernate,Nhibernate,我收到一个我不理解的NHibernate.DuplicateMappingException异常。该应用程序是一个简单的项目经理。它包含一个Project类,该类具有ProjectNote类型的Notes属性。以下是错误消息: NHibernate.MappingException: Could not compile the mapping document: ProjectManager.Domain.Mapping.ProjectNote.hbm.xml ---> NHibernat

我收到一个我不理解的NHibernate.DuplicateMappingException异常。该应用程序是一个简单的项目经理。它包含一个Project类,该类具有ProjectNote类型的Notes属性。以下是错误消息:

NHibernate.MappingException: Could not compile the mapping document: ProjectManager.Domain.Mapping.ProjectNote.hbm.xml ---> NHibernate.DuplicateMappingException: Duplicate class/entity mapping ProjectNote
下面复制了类定义和映射文件

有人能告诉我为什么会出现重复映射异常吗?谢谢


使用System.Collections.Generic;
命名空间ProjectManager.Domain
{
公共类项目
{
#区域构造函数
公共工程()
{
初始化();
}
#端区
#区域属性
/// 
///此项目的ID。
/// 
公共虚拟整数ID{get;set;}
/// 
///用于在项目列表中对此项进行排序的值。
/// 
公共虚拟整数索引{get;set;}
/// 
///此项目的名称。
/// 
公共虚拟字符串名称{get;set;}
/// 
///此项目的注释。
/// 
公共虚拟IList注释{get;set;}
/// 
///此项目中的任务。
/// 
公共虚拟IList任务{get;set;}
#端区
#区域私有方法
/// 
///初始化这个类。
/// 
私有void初始化()
{
任务=新列表();
注释=新列表();
}
#端区
}
}

namespace ProjectManager.Domain
{
公共类项目说明
{
#区域属性
/// 
/// 
/// 
公共虚拟整数ID{get;set;}
/// 
///此注释的父项目。
/// 
公共虚拟项目父项{get;set;}
/// 
///说明的案文
/// 
公共虚拟字符串文本{get;set;}
#端区
}
}





您已经映射了两次ProjectNotes表。一旦进入Project.Notes包,再次作为ProjectNote类的主表。尝试从映射Project.Notes的元素中删除table属性。

在做了一些进一步的测试之后,我不确定这是什么原因。我从项目中删除了ProjectNote映射文件,异常消失了。后来,我重新添加了该文件,希望复制异常,但没有得到它。这个仍然有点神秘。我将把约翰的答案标为正确答案,因为他可能是对的。但我不能保证100%的解决方案。
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>