powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Мягкое удаление NHibernate и Where clause
3 сообщений из 3, страница 1 из 1
Мягкое удаление NHibernate и Where clause
    #37414601
NHibernate_User_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,
Есть NHibernate, и везде мягкое удаление, но возникла такая схема:

(в общем схема сложная, я ее пока приводить не буду, отмечу такую особенность NHibernate)

У нас коллекция маппится с помощью условия Where

HasMany(x => x.Elements).AsSet().Access.CamelCaseField().KeyColumn("EntityId").Inverse().Cascade.SaveUpdate().Where("DeleteDate is null");

Тогда NH вставляет условие в каждый запрос.
Но тут беда в том, что если есть иерархия объектов, и мы в одной сущности хотим иметь коллекцию элементов-предков, а в другой коллекцию элементов-потомков. DeleteDate мапится либо в одну таблицу, либо в другую. Если она мапится в таблицу с потомками, то у предка не получается выполнить запрос, там нет признака удаления. Если она мапится в таблицу с предками, то NHibernate при запросе к коллекции объектов-потомков пытается сделать Where DeleteDate is null прямо для таблицы с потомками, а там нет такого поля.

Мапить DeleteDate в обе таблицы нам не разрешают.

Как быть?

Нашел доп. форму Where у HasMany, которая принимает лямбду. Где бы про нее почитать? Когда пытаюсь дать .Where(x=>x.DeleteDate == null), NHibernate при старте мне ругается, а InnerException говорит, что переменная x не определена (??!!!)

Код: plaintext
1.
2.
3.
4.
5.
6.
    public abstract class ToManyBase<T, TChild, TRelationshipAttributes> : ICollectionMappingProvider
    {
        ...
        public T Where(Expression<Func<TChild, bool>> where);
        public T Where(string where);
    }
...
Рейтинг: 0 / 0
Мягкое удаление NHibernate и Where clause
    #37415604
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NHibernate_User_,

я правильно понимаю, что у классов предка и потомка нет свойства DeleteDate?
...
Рейтинг: 0 / 0
Мягкое удаление NHibernate и Where clause
    #37521664
NHibernate_User_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,
Мы пробовали 2 варианта
1) Свойство DeleteDate есть и у предка, и у потомка, т.к. оно объявлено в предке (значит, доступно и потомку).
Замаплено оно в таблицу предка.
2) Свойство DeleteDate есть только у потомка, т.к. оно объявлено в потомке
Замаплено оно в таблицу потомка.

(1) - проблема: NHibernate при запросе к коллекции объектов-потомков пытается сделать Where DeleteDate is null прямо для таблицы с потомками, а там нет такого поля.

(2) - проблема: у предка не получается выполнить запрос, т.к. в нем нет DeleteDate.

А надо, чтобы можно было сохранять экземпляры предков (не являющихся никакими своими потомками), а также потомков.
Т.е. от A произошло B, и C, D. Есть экземпляры B, C и D (все они, понятно, являются при этом A), а есть такие экземпляры A, которые не являются никакими из своих потомков. Надо сохранять и то, и то. Как? (Если используется .Where("DeleteDate is null"))
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Мягкое удаление NHibernate и Where clause
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]