我有一个抽象类及其子类,我想使用 NHibernate 将其映射到我的数据库。我在用着Fluent https://github.com/FluentNHibernate/fluent-nhibernate/wiki/Fluent-configuration以及如何进行映射。但是当我添加子类的映射时,映射时会抛出 NHibernate.DuplicateMappingException 。为什么?
这是我的(简化的)课程:
public abstract class FieldValue
{
public int Id { get; set; }
public abstract object Value { get; set; }
}
public class StringFieldValue : FieldValue
{
public string ValueAsString { get; set; }
public override object Value
{
get
{
return ValueAsString;
}
set
{
ValueAsString = (string)value;
}
}
}
和映射:
public class FieldValueMapping : ClassMap<FieldValue>
{
public FieldValueMapping()
{
Id(m => m.Id).GeneratedBy.HiLo("1");
// DiscriminateSubClassesOnColumn("type");
}
}
public class StringValueMapping : SubclassMap<StringFieldValue>
{
public StringValueMapping()
{
Map(m => m.ValueAsString).Length(100);
}
}
还有例外:
> NHibernate.MappingException : Could not compile the mapping document: (XmlDocument)
----> NHibernate.DuplicateMappingException : Duplicate class/entity mapping NamespacePath.StringFieldValue
有任何想法吗?
发现了问题。事实证明,我确实在用于配置数据库的 PersistenceModel 中多次引用了同一个程序集:
public class MappingsPersistenceModel : PersistenceModel
{
public MappingsPersistenceModel()
{
AddMappingsFromAssembly(typeof(FooMapping).Assembly);
AddMappingsFromAssembly(typeof(BarMapping).Assembly);
// Where FooMapping and BarMapping is in the same Assembly.
}
}
显然这对于 ClassMap 映射来说不是问题。但对于 SubclassMap 它也不能处理它,从而导致重复映射 - 从而导致 DuplicateMappingException。删除 PersistenceModel 中的重复项可以解决该问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)