Fluent NHibernate中JoinedSubClassPart的问题

时间:2009-06-16 19:56:37

标签: nhibernate fluent-nhibernate nhibernate-mapping

我似乎无法在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);
    }
}

1 个答案:

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