我似乎无法在Fluent NHibernate中使用JoinedSubClassPart为继承类建模(版本524)。我看到其他帖子表明我正在使用的方法(见下文)应该有效,但在运行时我得到以下异常(由JoinedSubClassPart的ImappingPart.PositionOnDocument方法引发):
XunitException:FluentNHibernate.Cfg.FluentConfigurationException:创建SessionFactory时使用了无效或不完整的配置。检查PotentialReasons集合,以及InnerException以获取更多详细信息。
---- System.InvalidOperationException:无法比较数组中的两个元素。 -------- System.NotSupportedException:已过时
这实际上是否有用或者是否已经弃用了另一种方法?
我希望我只是做错了,因为我喜欢通过AddPart()动态添加子类映射的想法。
任何帮助将不胜感激!
我的对象模型的简化版本(仍然失败)如下:
public class MyBaseClass
{
public int Id { get; set; }
public string CommonProperty { get; set; }
}
public class MySubClass1 : MyBaseClass
{
public string MySubClass1Property { get; set; }
}
public class MySubClass2 : MyBaseClass
{
public string MySubClass2Property { get; set; }
}
我的映射如下:
public class MyBaseClassMap : ClassMap<MyBaseClass>
{
public MyBaseClassMap()
{
Not.LazyLoad();
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.CommonProperty);
AddPart(new MySubClass1Map());
AddPart(new MySubClass2Map());
}
}
public class MySubClass1Map : JoinedSubClassPart<MySubClass1>
{
public MySubClass1Map()
: base("MyBaseClassId")
{
Not.LazyLoad();
Map(x => x.MySubClass1Property);
}
}
public class MySubClass2Map : JoinedSubClassPart<MySubClass2>
{
public MySubClass2Map()
: base("MyBaseClassId")
{
Not.LazyLoad();
Map(x => x.MySubClass2Property);
}
}
答案 0 :(得分:1)
在深入挖掘之后,我发现了this流畅的nhibernate问题,这解释了,从r526开始,AddPart已被弃用,转而使用JoinedSubClass。在将我的代码修改为如下所示之后,我能够获得我正在寻找的建模。
在我的基类映射中,我将对AddPart的调用替换为:
JoinedSubClass("MyBaseClassId", MySubClass1Map.AsJoinedSubClass());
JoinedSubClass("MyBaseClassId", MySubClass2Map.AsJoinedSubClass());
我的子类映射更改为:
public class MySubClass1Map
{
public static Action<JoinedSubClassPart<MySubClass1>> AsJoinedSubClass()
{
return sub =>
{
sub.Map(x => x.MySubClass1Property);
};
}
}
public class MySubClass2Map
{
public static Action<JoinedSubClassPart<MySubClass2>> AsJoinedSubClass()
{
return sub =>
{
sub.Map(x => x.MySubClass2Property);
};
}
}