gpt4 book ai didi

映射抽象类和子类时NHibernate DuplicateMappingException

转载 作者:行者123 更新时间:2023-12-04 14:06:49 24 4
gpt4 key购买 nike

我有一个抽象类和它的子类,我想使用 NHibernate 将它映射到我的数据库。我正在使用 Fluent以及如何进行映射。但是当我添加子类的映射时,在映射时会抛出 NHibernate.DuplicateMappingException。为什么?

这是我的(简化的)类(class):

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);
}
}

和异常(exception):
> 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-mappings 来说不是问题。但是对于 SubclassMap 它也没有处理它,导致重复映射 - 因此出现 DuplicateMappingException。删除 PersistenceModel 中的重复项可以解决此问题。

关于映射抽象类和子类时NHibernate DuplicateMappingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3043446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com