NHibernate Many-To-One в объединенном подклассе с фильтром

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

public abstract class Parent
{
    public virtual bool IsDeleted { get; set; }
}

public class Child : Parent
{
}

public class Other
{
    public virtual ICollection<Child> Children { get; set; }
}

Дочерний объект отображается как присоединенный подкласс к родительскому классу. Чилден обозначен как сумка "многие-к-одному". К сумке применен фильтр SoftDeletableFilter. Отображение фильтра выглядит так:

<filter-def name="SoftDeleteableFilter" condition="(IsDeleted = 0 or IsDeleted is null)" />

Проблема в том, что при загрузке Other.Children фильтр применяется к дочерней таблице, а не к родительской. Есть ли способ указать NHibernate применить фильтр к родительскому классу?

Изменить: вот родительское сопоставление:

<class name="Parent">
  <id ..
  <property name="IsDeleted" type="System.Boolean">
    <column name="IsDeleted" />
  </property>
  <joined-subclass name="Child">
    <key>
      <column name="ParentId" />
    </key>
    ...
  </joined-subclass>
</class>

person Nathan Roe    schedule 16.06.2010    source источник
comment
Сегодня столкнулся с той же проблемой. Когда-нибудь находили решение?   -  person Joel    schedule 29.06.2011


Ответы (2)


Наконец нашел ответ на этот вопрос. Возможно, это не самый эффективный подход, но вы можете переписать условие фильтрации как подзапрос:

ParentId in (Select p.ParentId from Parent p where p.IsDeleted = false)

Спасибо CSharper из в группе пользователей за предложение

person Joel    schedule 29.07.2011

вам нужно добавить фильтр в родительский класс:

<class name="Parent">
  <id ..
  <property name="IsDeleted" type="System.Boolean">
    <column name="IsDeleted" />
  </property>
  <joined-subclass name="Child">
    <key>
      <column name="ParentId" />
    </key>
    **<filter-def name="SoftDeleteableFilter" condition="(IsDeleted = 0 or IsDeleted is null)" />**
  </joined-subclass>
  **<filter-def name="SoftDeleteableFilter" condition="(IsDeleted = 0 or IsDeleted is null)" />**
</class>
person Peter    schedule 06.07.2011
comment
Это не решает проблемы. Если я запрашиваю удаленные элементы родительского класса, они будут отфильтрованы, но если я присоединю сумку к дочернему классу, они не будут отфильтрованы. - person Joel; 06.07.2011
comment
Я добавил фильтр в объединенный подкласс, вы можете проверить, работает ли он для вас? В документации по nhibernate есть подобный пример для наборов. - person Peter; 13.07.2011
comment
filter-def не является допустимым дочерним элементом присоединенного подкласса. - person Joel; 29.07.2011