Проблема с JoinedSubClassPart в Fluent NHibernate - PullRequest
0 голосов
/ 16 июня 2009

Кажется, у меня проблемы с моделированием унаследованных классов с использованием JoinedSubClassPart в Fluent NHibernate (выпуск 524).Я видел другие сообщения, указывающие, что подход, который я использую (см. Ниже), должен работать, но во время выполнения я получаю следующее исключение (генерируемое методом ImappingPart.PositionOnDocument из JoinedSubClassPart):

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 Ответ

1 голос
/ 19 июня 2009

Пройдя немного глубже, я обнаружил эту проблему с текучим 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);
        };
    }
}
...