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
{
}
}
我还没有完全理解这个错误,有什么想法我为什么会得到这个例外吗?
谢谢。
正如我们在文档中看到的那样
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