170 похожих чатов

Дарова ребят, есть вопросик из категории EF + Automapper +

DTO.
Есть довольно объемный проект. Нужно впилить в проект Soft Delete (мягкое удаление - запись не удаляется, а помечается что-то вроде IsDeleted = true + еще пара свойств, типо кто удалил).
У проекта куча сущностей, надо сделать возможность мягкого удаления для нескольких из них (штук 10).
У проекта есть уровень Core (что-то вроде бизнес логики и уровень бд, дальше там развлетвления на портирование - веб, wpf, xamarin).
Core содержит в себе DTOшки и сервисы (сервисы работают только с DTO - принимают и отдают). Все это дело между собой маппится Automapper'ом. (Сущности и DTO, ну и дальше соответственно).

Идея состоит в том, что есть интерфейс для Soft Delete (выше описал основные свойства). Этот интерфейс имлементиться и для DTO и для Сущностей. Если с вопросом мягкого удаления все хорошо, то с вопросом восстановления после мягкого удаления не очень.

Есть метод Restore<T> (T dto) where T : BaseDTO, ICanSoftRemoval, ....
{
.... какие-то действия .....
Uow.Repository<???> ().Update(Mapper.Map<T, ???> (dto));
}

Относительно того, почему юзается кастомная версия Uow & Repository - приложение работает сразу с 2 база данных (NoSQL & SQL).

Как можно красиво узнать какому типу следует маппить dto и тип репозитория?

- словарь типов, не очень как по мне идея и как-то костыльно слишком...
- передавать в Restore сразу 2 дженерика, тоже не очень, так как метод будет вызываться в более верхнем слое, который в принципе не шарит, что такое база данных и и что там такое.

5 ответов

10 просмотров

https://www.thereformedprogrammer.net/ef-core-in-depth-soft-deleting-data-with-global-query-filters/

Царь- Автор вопроса
Qart2003
https://www.thereformedprogrammer.net/ef-core-in-d...

Спасибо конечно, но я это читал (по крайней мере взглядом пробегал), там нету информации относительно решение мое задачи. С точки зрения базовой имплементации идеи Soft Delete с EF или без него все просто. У меня проблема относительно Automapper'a скорее и взаимодействия слоя логики и базы данных в данном случае. Я ищу вариант элегантного решения задачи - конечно можно написать N методов на Restore любой DTOшки. Но это немного странный подход. Подход с словарем соотношения типом меня тоже не очень радует - тогда резко пропадает одна из функций автомаппера (соотносить типы автоматически). Я описывал проблему максимально подробно, так как возможно кто-то мог предложить идею внесения изменений не в слой логики, а в слой базы данных (напомню, у там юзается 2 базы данных - Mongo и MySQL), именно поэтому паттерн репозиторий и UOW имплементятся кастомно, а не берутся с того же EF'a. Но спасибо за ваше внимание)

Царь- Автор вопроса
Qart2003
Словарь строить автоматически

Подробнее?) Кем строиться? Как вытащить тип сущности которому следует приводить дтошку?

Царь
Спасибо конечно, но я это читал (по крайней мере в...

Вот как раз тк две бд, то нужен сервис, который будет строить словарь автоматом, тогда будет пофиг сколько бд, их кстати и на ентити может быть больше одной

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта