gpt4 book ai didi

每个类加载 NHibernate 表 - 错误类型

转载 作者:行者123 更新时间:2023-12-04 18:49:52 25 4
gpt4 key购买 nike

我在 Fluent/NHibernate 中的 table-per-class 层次结构有一个映射问题。从数据库中检索记录时,我不断收到错误(错误类型异常)

id 为:2445763 的对象不属于指定的子类:ClassA(正在加载的对象属于错误的类 [ClassB])(记录 2445763 在类型列中确实具有值“2”)

在我的域中,我有 EntryBase、ClassA 和 ClassB。类定义为

public abstract class EntryBase 
{
public virtual int Id {get;set;}
public virtual string CommonProperty1 {get;set;}
*... (lots of other common properties)*
public virtual string CommonPropertyN {get;set;}
}

public class ClassA : EntryBase
{
public virutal string ClassAOnlyProperty {get;set;}
}

public class ClassB : EntryBase
{
public virutal string ClassBOnlyProperty {get;set;}
public virutal int ClassBOnlyOtherProperty {get;set;}
}

映射是:
public class EntryBaseMap : ClassMap<EntryBase>
{
public EntryBaseMap()
{
Table("MySingleTable");
Id(x => x.Id, "RecordId").GeneratedBy.Identity();
Map(x => x.CommonProperty1, "Field1Name");
...
Map(x => x.CommonPropertyN, "FieldNName");
DiscriminateSubClassesOnColumn<string>("Type");
}
}

public class ClassAMap : SubclassMap<ClassA>
{
public ClassAMap()
{
DiscriminatorValue("1");
Map(x => x.ClassAOnlyProperty);
}
}

public class ClassBMap : SubclassMap<ClassB>
{
public ClassBMap()
{
DiscriminatorValue("2");
Map(x => x.ClassBOnlyProperty);
Map(x => x.ClassBOnlyOtherProperty);
}
}

知道可能有什么问题吗?我已经正确地能够存储 B 类的记录,但是当我检索它们时,它试图将它们加载为 A 类。这是映射问题吗?

最佳答案

正如评论中所讨论的,如果您有表示单个子类的集合属性,则需要在映射中添加一个 where 子句:

.Where("Type = '1'")
Type是您的鉴别器列和 1是与您尝试加载的类型匹配的鉴别器值。

关于每个类加载 NHibernate 表 - 错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713569/

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