NHibernate-DuplicateMappingException重复导入:视图同时引用两者

本文关键字:引用 视图 导入 NHibernate-DuplicateMappingException | 更新日期: 2023-09-27 18:22:15

我得到了这个异常:

重复导入:视图同时引用TrackingPrototype.Models.vTSPriorityExclude,TrackingProtype,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null和TrackingPrototype.Models.vDMPreduceExclude,跟踪原型,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null(尝试使用自动导入="false")

我有两个视图,vDMPreduceExclude和vTSPriorityExclude。

2个映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="TrackingPrototype"
                   namespace="TrackingPrototype.Models">
  <class name="vDMPrecedenceExclude" table="vDMPrecedenceExclude" entity-name="View">
    <id name="id" type="Int32" column="id" unsaved-value="0">
      <generator class="identity"/>
    </id>
    <property name="EngagementID" />
    <property name="Issued" />
    <property name="ReturnedByPresenter" />
    <property name="SentToProducer" />
    <property name="ReturnedByProducer" />
    <property name="Executed" />
    <property name="ExcludedBitSet" />
    <property name="Change" />
  </class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="TrackingPrototype"
                   namespace="TrackingPrototype.Models">
  <class name="vTSPrecedenceExclude" table="vTSPrecedenceExclude" entity-name="View">
    <id name="id" type="Int32" column="id" unsaved-value="0">
      <generator class="identity"/>
    </id>
    <property name="EngagementID" />
    <property name="Received" />
    <property name="Drafted" />
    <property name="SentToProducer" />
    <property name="SentToPresenter" />
    <property name="ExcludedBitSet" />
  </class>
</hibernate-mapping>

加载方式如下:

configuration.AddFile(HttpContext.Current.Server.MapPath(@"Mappings'vDMPrecedenceExclude.hbm.xml"));
configuration.AddFile(HttpContext.Current.Server.MapPath(@"Mappings'vTSPrecedenceExclude.hbm.xml"));

异常是指第二行。

和模型定义为:

namespace TrackingPrototype.Models
{
    public class DealMemoTracking : Tracking
    {
        public virtual DateTime? Issued { get; set; }
        public virtual DateTime? ReturnedByPresenter { get; set; }
        public virtual DateTime? SentToProducer { get; set; }
        public virtual DateTime? ReturnedByProducer  { get; set; }
        public virtual DateTime? Executed { get; set; }
        public virtual int ExcludedBitSet { get; set; }
    }
}
namespace TrackingPrototype.Models
{
    public class TicketScalesTracking : Tracking
    {
        public virtual DateTime? Received { get; set; }
        public virtual DateTime? Drafted { get; set; }
        public virtual DateTime? SentToProducer { get; set; }
        public virtual DateTime? SentToPresenter { get; set; }
        public virtual int ExcludedBitSet { get; set; }
    }
}
namespace TrackingPrototype.Models
{
    public class vDMPrecedenceExclude : DealMemoTracking
    {
    }
}
namespace TrackingPrototype.Models
{
    public class vTSPrecedenceExclude : TicketScalesTracking
    {
    }
}

我还没有完全理解这个错误,有什么想法我为什么会得到这个例外吗?

谢谢。

NHibernate-DuplicateMappingException重复导入:视图同时引用两者

正如我们在文档中看到的那样

4.4.动态模型

持久实体在运行时不一定要表示为POCO类。NHibernate还支持动态模型(在运行时使用Dictionarys词典)。使用这种方法,您不编写持久类,只编写映射文件。

默认情况下,NHibernate在正常的POCO模式下工作。您可以使用default_entity_mode配置选项为特定ISessionFactory设置默认实体表示模式

以下示例演示了使用Maps(Dictionary)的表示。首先,在映射文件中,必须声明实体名,而不是(或除了)类名:

<class entity-name="Customer">

就这样,如果我们有一个POCO类,我们应该使用name属性。不是entity-name。应该做出的改变:

// instead of this
// <class name="vDMPrecedenceExclude" table="vDMPrecedenceExclude" entity-name="View">
// use this
<class name="vDMPrecedenceExclude" table="vDMPrecedenceExclude">

也请检查这个:

  • NHibernate在保存时尝试将Entity强制转换为IDictionary