sti*_*k81 5 nhibernate abstract-class nhibernate-mapping fluent-nhibernate
我有一个抽象类,以及它的子类,我想使用NHibernate将它映射到我的数据库.我正在使用Fluent,并在wiki上阅读如何进行映射.但是当我添加子类的映射时,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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
和映射:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
例外情况:
NHibernate.MappingException:无法编译映射文档:(XmlDocument)----> NHibernate.DuplicateMappingException:重复的类/实体映射NamespacePath.StringFieldValue
有任何想法吗?
发现了这个问题.事实证明,我确实在用于配置数据库的PersistenceModel中多次引用了同一个Assembly:
public class MappingsPersistenceModel : PersistenceModel
{
public MappingsPersistenceModel()
{
AddMappingsFromAssembly(typeof(FooMapping).Assembly);
AddMappingsFromAssembly(typeof(BarMapping).Assembly);
// Where FooMapping and BarMapping is in the same Assembly.
}
}
Run Code Online (Sandbox Code Playgroud)
显然这不是ClassMap映射的问题.但对于SubclassMap,它也不会处理它,从而导致重复映射 - 从而导致DuplicateMappingException.删除PersistenceModel中的重复项可以解决问题.
归档时间: |
|
查看次数: |
3511 次 |
最近记录: |