【问题标题】:Problem with JoinedSubClassPart in Fluent NHibernateFluent NHibernate 中 JoinedSubClassPart 的问题
【发布时间】:2009-06-16 19:56:36
【问题描述】:

我似乎无法在 Fluent NHibernate(版本 524)中使用 JoinedSubClassPart 对继承类进行建模。我看到其他帖子表明我正在使用的方法(见下文)应该可以工作,但在运行时我得到以下异常(由 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);
    }
}

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping


    【解决方案1】:

    在深入挖掘之后,我发现了thisfluent-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);
            };
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多