NHibernateс фильтрами - PullRequest
       1

NHibernateс фильтрами

4 голосов
/ 09 марта 2011

Я надеялся, что будет простой ответ на этот вопрос ....

У меня есть глобальный фильтр, предназначенный для предотвращения мягкого удаления в базе данных, он отлично работает в остальной части моей системы.Однако мы используем унаследованную базу данных с существующей таблицей " UserBase ", любые новые необходимые нам свойства мы добавили в таблицу " User " и отобразили наш класс User для извлечения данных из 2таблицы с использованием сопоставления "join" - таким образом мы не изменяем существующую таблицу " UserBase ".

Опять же, это работает нормально, пока мы не попытаемся применить фильтр мягкого удаления к классу- поскольку сгенерированный SQL применяет фильтр к таблице « BaseUser », в которой нет соответствующего столбца.

 <class name="User" table="UserBase">
    <id name="Id" column="userid" type="Int32" unsaved-value="-1">
        <generator class="native">
            <param name="sequence"></param>
        </generator>
    </id>
    <property name="Email" column="UserEmail" type="String" length="100" />
    .........
    .........
    <join table="User" optional="false">
     <key column="UserID"  />
     <property name="TimeZone" column="timezone" type="Int32" />
     .........
     .........
     <property name="IsDeleted" column="IsDeleted" type="Boolean" />
    </join>

    <filter name="AvoidLogicalDeleted" condition="IsDeleted = 0" />
 </class>

Можно ли как-нибудь применить фильтр к«присоединенная» таблица, а не таблица классов?

Я также пытался указать «подвыбор» в отображении «соединение» с предложением where, игнорирующим мягкое удаление, но, похоже, оно игнорируется!?

Точка в правильном направлении будет принята с благодарностью ....

1 Ответ

2 голосов
/ 22 октября 2011

Я не уверен, что у меня есть ответ так много, как обойти. Вместо того, чтобы сопоставлять класс Пользователь с таблицей Пользовательская база и затем присоединять к таблице Пользователь , как насчет использования представления? Возможно, вы можете создать представление в базе данных с именем UserView , к которому присоединены таблицы UserBase и User , а затем сопоставить класс User с это мнение. Затем NHibernate должен обработать столбец IsDeleted как любой другой столбец, и фильтр должен работать.

Другой вариант, который мне пришёл в голову, - поменять отображение класса User с UserBase на User . Столбец IsDeleted больше не будет находиться в объединенной таблице, а будет находиться в основной таблице, подключенной к Пользователь . Тогда тот факт, что фильтр не работает на объединенной таблице, не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...