Как заставить nhibernate не объединять результаты от унаследованных объектов? - PullRequest
0 голосов
/ 08 ноября 2018

У меня проблема с запросами nhibernate. В результате я получаю смесь из двух таблиц. Как мне сказать nhibernate не объединять результат из разных таблиц.

Это мой запрос:

using (var session = SessionFactory.OpenSession())
{
   using (var transaction = session.BeginTransaction())
   {
      timeEntryReportIds = session.Query<XXXX>()
                .Where(x => x.SentToServiceLeader == true && x.StartDate < cutoffDate)
                .Select(x => x.Id)
                .ToList();
      transaction.Commit();
   }
}

Мое сопоставление классов XXXX выглядит следующим образом:

public class XXXXMapping : ClassMapping<XXXXEntity>
{
    public XXXXMapping()
    {
        Table("XXXX");
        Property(x => x.X1, c => c.Type<UtcDateTimeType>());
        Property(x => x.X2, c => c.Type<UtcDateTimeType>());
        Property(x => x.X3, c => c.Index("IX_X3"));
        Property(x => x.X4, c => c.Index("IX_X4"));
        Property(x => x.X5);
        Property(x => x.X6);
    }
}

И у меня есть еще один, который выглядит так:

public class YYYYYMapping : ClassMapping<YYYYYEntity>
...

Мои классы определены так:

public class XXXXEntity : MwlEntityBase
...

и

public class YYYYEntity : XXXXEntity
...

Проблема, с которой я столкнулся, заключается в том, что когда я выполняю свой запрос, я получаю результат из таблиц XXXX и YYYYY. Как мне сказать nhibernate не делать этого!

Я провел некоторое исследование, прежде чем приехать сюда, и он сказал мне, что мне нужно расширить базовый класс, но у меня нет контроля над классом [MwlEntityBase]. Другие классы, которые я контролирую. Я попытался изменить наследование Classmapping с ClassMapping на UnionSubclassMapping и JoinedSubclassMapping. Но это не помогло, когда мы начали что-то говорить о пропущенном корневом элементе или о чем-то подобном. Я предположил, что это потому, что я не могу изменить класс MwlEntityBase? Или, может быть, я поступил неправильно.

В любом случае, мне нужна помощь с правильным способом решения этой проблемы. Я могу даже согласиться на неправильный способ решить это, это работает :) 1022 *

1 Ответ

0 голосов
/ 09 ноября 2018

Короткий ответ, не наследуйте от XXXX ^^ Просто создайте абстрактный базовый класс и выведите XXXX и YYYY из этого базового класса.

public abstract class BaseEntity : MwlEntityBase
{
    // The common properties for XXXX and YYYY.
}

public class XXXX : BaseEntity {}

public class YYYY : BaseEntity {}
...