Загрузка базового класса через nhibernate неправильно использует отображения из производных классов - PullRequest
1 голос
/ 29 декабря 2010

У меня есть сценарий, где у меня есть базовый класс в качестве одного объекта, а затем другой объект, который является производным от другого базового класса.Оба имеют значение в моем домене и могут использоваться отдельно.

public class MyBaseClass
{
    int ID { get; set; }
    string Name { get; set; }
}

public class MyChildClass
{
    string AdditionalField { get; set; }
}

Я сопоставил оба с использованием Fluent nHibernate с использованием ClassMap следующим образом:

public class MyBaseClassMap : ClassMap<MyBaseClass>
{
   Id("MyBaseClassID");
   Map(x => x.Name);
}

public class MyChildClassMap : SubclassMap<MyChildClass>
{
   Map(x => x.AdditionalField);
}

Что происходит, когда я пытаюсьполучить копию базового класса, используя сопоставление для дочернего класса.Как будто он не знает разницы между базовым и дочерним классом или выбирает неправильное отображение для него.Я подтвердил это, наблюдая за оператором SQL и его присоединением к дочерней таблице и выбирая дополнительный столбец.Есть ли способ заставить его использовать правильную карту?

1 Ответ

2 голосов
/ 29 декабря 2010

Это «природа» NHibernate.
Поведение, которое вы описываете, называется «полиморфными запросами».

Поскольку MyChildClass является MyBaseClass, также извлекаются экземпляры MyChildClass.

Если вы хотите избежать такого поведения, вы можете взглянуть на ответы в этой теме . (Я никогда не «отключал» способность полиморфного запроса).

...