我使用FluentNHibernate和AutoMapping来映射我的持久化类。 每个子类映射的默认表适用于几乎所有我的类层次结构,除了一个:这里我有一个抽象基类“A”,A具有所需的所有数据字段。子类“B”,“C”,......“X”仅在行为上有所不同。 “每班课程”会导致许多不受欢迎的表格 我想创建一个Override类来创建一个表A(我可以使用IncludeBaseClass Override执行此操作。但是如何设置Discriminator Override类,它还将所有子类放在此表中? 流利的文档表明如下:
public override bool IsDiscriminated(Type type)
{
return type.In(typeof(ClassOne), typeof(ClassTwo));
}
我认为这样可以为我的情况做好准备:
public override bool IsDiscriminated(Type type)
{
return (type == typeof(A));
}
但是将此方法放在哪个Override类中?
答案 0 :(得分:1)
将此方法放在继承自DefaultAutomappingConfiguration
的类中
也可能需要这样做:return (type == typeof(A) || type.IsSubclassOf(typeof(A));
答案 1 :(得分:0)
“IsDiscriminated”方法是“DefaultAutomappingConfiguration”类的一部分。 通过重写此类,您可以更改类的映射方式:
public class MyAutomappingConfiguration : DefaultAutomappingConfiguration
{
public override bool ShouldMap(Type type)
{
return type.Namespace != null &&
type.Namespace.Contains("Models");
}
public override bool IsDiscriminated(Type type)
{
return type == typeof(Code);
}
}
注意:ShouldMap被覆盖,以及使用此配置类阻止在映射中使用“Where”子句 它传递给映射过程,如下所示:
AutoMap.Assemblies(new MyAutoMappingConfig(), assembliesToMap.ToArray()). Conventions.AddFromAssemblyOf<BaseEntity>();