powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ef core update вместо delete
42 сообщений из 42, показаны все 2 страниц
ef core update вместо delete
    #39639859
Vladimirzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
EF Core. Возникло требование не удалять строки в базе а помечать как удаленные. Подскажите пожалуйста - есть ли способ сделать это как то автоматом, не засоряя модели признаком isDeleted и чтоб работало каскадное удаление (то есть каскадное выставление признака isDeleted )
Спасибо
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639881
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimirzzzне засоряя модели признаком isDeletedVladimirzzzкаскадное выставление признака isDeletedя один ничего не понял?
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639905
Vladimirzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Я только залез в ef поэтому может не очень точно выражаюсь. Я так понимаю что могу получить нужный функционал добавив в модель property 'isDeleted' ну или что нибудь в этом роде и потом пользуясь только update ручками проставлять его у дочерних сущностей, при выборках не учитывать записи с isDeleted = true и.т.д. Но хочется сразу для всех сущностей подменить поведение что бы вместо удаления из базы была пометка записи как удаленной.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639942
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimirzzzдобавив в модель property 'isDeleted'не надо.
Он сам это делает.
Если вы о псевдоудалении то забудьте.
Переносите сущности в архив, но не делайте флаги "Как бы удалено"
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639963
Vladimirzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Хранить удаленные записи - это требование заказчика ( как и подробное логирование изменений сущностей и пессимистичная блокировка и модерация изменений :) )
А какие минусы у псевдоудаленных записей кроме разбухания таблицы ?

С архивом - дублировать все таблицы ? Или всю базу? Сразу возникает вопрос контроля куда ведут связи из архивной таблицы - в основную из актуальных таблиц или уже в архивную ?
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639965
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делайте статусы в таблицах и меняйте их при "удалении" записей, это всё решается в вашем случаем бизнес логикой
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639972
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirzzzДобрый день.
EF Core. Возникло требование не удалять строки в базе а помечать как удаленные. Подскажите пожалуйста - есть ли способ сделать это как то автоматом, не засоряя модели признаком isDeleted и чтоб работало каскадное удаление (то есть каскадное выставление признака isDeleted )
Спасибо
Vladimirzzz, Руками: How to make soft delete in cascade with Entity Framework Core including navigation properties?
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639975
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimirzzz, ну и про глобальные фильтры почитайте... вроде здесь все вместе
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639978
Vladimirzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
Ну да с isDeleted это и есть этот вариант. Но мне кажется что этим не нужно бы засорять бизнес логику так как удалять или помечать- это зависит от реализации хранилища, то есть относится к DAL и жить должно там.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639983
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirzzzKonst_One,
Ну да с isDeleted это и есть этот вариант. Но мне кажется что этим не нужно бы засорять бизнес логику так как удалять или помечать- это зависит от реализации хранилища, то есть относится к DAL и жить должно там.
Ну так и читайте про патерне матерны... если хотите "чистоты"... репозитории поки дто с автомапперами...
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639985
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirzzzХранить удаленные записи - это требование заказчика (он же не сказал каким методом.
Он слово запись не употреблял?
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639987
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirzzzА какие минусы у псевдоудаленных записей кроме разбухания таблицы ?а как один ко многим будет работать?
Когда в цикле по записям мастера пойдут запросы ленивые к чилдренам?
А там из 100 детишек только 2 реальных.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639990
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirzzzС архивом - дублировать все таблицы ? Или всю базу? Сразу возникает вопрос контроля куда ведут связи из архивной таблицы - в основную из актуальных таблиц или уже в архивную ?
Как вариант базы OLAP / OLTP
Т.е. Закрыть опер день означает переместить накладные в другю базу или таблу.
Денормализовав.
Там целая ветка форума есть.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639994
Vladimirzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buserНу так и читайте про патерне матерны... если хотите "чистоты"... репозитории поки дто с автомапперами...
Нууу ... почти во всем хороша умеренность :)
Спасибо - ссылки как раз то что нужно.
Меня в гугле не забанили - я просто не сообразил что это "soft delete" :)
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639995
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimirzzz, и таки да... возможно есть поддержка на уровне движка вашей субд... как пример - Temporal Tables в ms sql
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639996
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneделайте статусы в таблицах и меняйте их при "удалении" записей, это всё решается в вашем случаем бизнес логикой
Тут ef. Он сам не удаляет.
Код: c#
1.
Контекст.Должники.Del(person)
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39639999
Vladimirzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за советы.

Вот может еще кому пригодится http://dotnetfalcon.com/entity-framework-logical-delete-part-one-intro-and-questions/
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640000
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Konst_Oneделайте статусы в таблицах и меняйте их при "удалении" записей, это всё решается в вашем случаем бизнес логикой
Тут ef. Он сам не удаляет.
Код: c#
1.
Контекст.Должники.Del(person)



ну и что, можно и апдейт сделать колонки статуса и выборку без статуса удалён и тд и тп
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640010
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
Все можно. Но код будет адовый. Миграция адовая и FK работать не будет т.к. мастер вроде бы удален, а чилдрены нет.
В общем надо смотреть что выираем.
Если думаем что я могу вернуть сущность удаленную месяц назад, то нет. Чревато. У сущности куча связей.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640017
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Konst_One,
Все можно. Но код будет адовый. Миграция адовая и FK работать не будет т.к. мастер вроде бы удален, а чилдрены нет.
В общем надо смотреть что выираем.
Если думаем что я могу вернуть сущность удаленную месяц назад, то нет. Чревато. У сущности куча связей.

видно мы о разном:

Код: c#
1.
var active = db.MasterTable.Include("Children").where(x => x.Status != "deleted").ToList();
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640049
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
ToList убери и пройдись циклом.
foreach ........
Чилдрены будут автоматом грузится все 100 штук или только актуальные?
2. Каскад будет работать?
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640050
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One
Код: c#
1.
Include

и это убери.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640054
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
У сущности Юзер есть машины, дети и долги.
У долгов тоже есть каскад и FK.
Как удалить юзверя со всем барахлом по каскаду?
Как обеспечить проверку FK при псевдоудалении?
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640055
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Konst_One
Код: c#
1.
Include


и это убери.

проехали, мы о разном ...
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640058
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Konst_One,
У сущности Юзер есть машины, дети и долги.
У долгов тоже есть каскад и FK.
Как удалить юзверя со всем барахлом по каскаду?
Как обеспечить проверку FK при псевдоудалении?

не нужно ТСу физически удалять, ему нужно , чтобы физически эти данные в таблице оставались, я привёл пример , как это реализуется в бизнес-логике.

ps
tolist include etc тут не при чём, я про суть , что можно это решить через колонку статуса
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640059
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneпроехали, мы о разном ...
Ок.
Я за то чтобы в бизнес требованиях ставить галку Удален или Актуален или Уволен.
Но не а все подряд таблицы.
Ты наверно про это.
Удачи!
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640085
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirzzzДобрый день.
EF Core. Возникло требование не удалять строки в базе а помечать как удаленные. Подскажите пожалуйста - есть ли способ сделать это как то автоматом, не засоряя модели признаком isDeleted и чтоб работало каскадное удаление (то есть каскадное выставление признака isDeleted )
Спасибо

НЕТ. нельзя. точнее, попытайся что-то изобразить и на простетских примерах что-то да получится, но граблей столько, что не оберёшься.

IsDeleted натуральное зло, тупейший костыль, которым грешат нубасы.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640100
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttIsDeleted натуральное зло, тупейший костыль, которым грешат нубасы.+1
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640105
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttVladimirzzzДобрый день.
EF Core. Возникло требование не удалять строки в базе а помечать как удаленные. Подскажите пожалуйста - есть ли способ сделать это как то автоматом, не засоряя модели признаком isDeleted и чтоб работало каскадное удаление (то есть каскадное выставление признака isDeleted )
Спасибо

НЕТ. нельзя. точнее, попытайся что-то изобразить и на простетских примерах что-то да получится, но граблей столько, что не оберёшься.

IsDeleted натуральное зло, тупейший костыль, которым грешат нубасы.
Правильно! Надо IsActive
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640119
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПравильно! Надо IsActive

Шутка не удалась )
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640137
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще этому решению сто лет в обед.
Как-то тётя Маша случайно удалила записи об отгрузке нефти на кругленькую сумму денег и тут же возникло требование ни фига из базы физически не удалять.
Требование было реализовано.

Понятно, что с того времени появились лучшие варианты не потерять важные данные.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640359
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВообще этому решению сто лет в обед.
Как-то тётя Маша случайно удалила записи об отгрузке нефти на кругленькую сумму денег и тут же возникло требование ни фига из базы физически не удалять.

«Ничего физически не удалять» и так называемый флаг «удаления», который можно встретить в овер 80% системах, это не одно и то же :)

skyANAТребование было реализовано.

Это понятно. Но как и многие плохие привычки, исходят из какой-то разовой необходимости, потом остаются надолго и кочуют из проекта в проект, просто бездумно.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640382
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttIsDeleted натуральное зло, тупейший костыль, которым грешат нубасы.

а что не зло? как делают не нубасы?
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640388
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bach,
Вроде весь топик в ответах)
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640393
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachhVosttIsDeleted натуральное зло, тупейший костыль, которым грешат нубасы.

а что не зло? как делают не нубасы?

Операция «Удаление» это удаление, оно должно приводить к удалению данных из системы. Что должен понять сотрудник глядя на запись с IsDeleted == true? Это что вообще значит? Случайно создали кривую запись и грохнули? Объект выведен из эксплуатации? Ошибка тёти Маши? Как это вообще отвечает целостности, за которую так божатся, выбирая SQL? Если записи нет, на неё сослаться нельзя, буквально физически, сервер не даст с констрейтами.

Ещё момент. Наивная уверенность в сохранности данных. Типа, если случайно что-то там грохнули, не беда это восстановить, просто вернув флаг. Но это не так. Нельзя вернуть никакую запись, которая участвует в формировании балансов, сумм, лимитов и прочего. Любая бизнес-система инкрементальная, каждая операция меняет её состояния, каждая операция основывается на состоянии. Если что-то просто «вернуть к жизни», значит все операции, которые были совершены после «удаления» нельзя считать корректными.

Потом. Писать запросы с учётом IsDeleted, строить отчёты, проводить какую-то аналитику, становится дорогим и затратным делом. Всё равно, что лазить в холодильник и выбирать какая колбаса свежая, из всего мусора, который там навален. И наклеечки «пропало» не улучшают ситуацию.

Но всё равно так делают. Много и часто. И не от большого ума, скорее прикрыть точку, ну и от бездарности и лени (не той, что делает разработчика профессионалом, а другой консистенции).
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640399
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttlove_bachпропущено...


а что не зло? как делают не нубасы?

Операция «Удаление» это удаление, оно должно приводить к удалению данных из системы. Что должен понять сотрудник глядя на запись с IsDeleted == true? Это что вообще значит? Случайно создали кривую запись и грохнули? Объект выведен из эксплуатации? Ошибка тёти Маши? Как это вообще отвечает целостности, за которую так божатся, выбирая SQL? Если записи нет, на неё сослаться нельзя, буквально физически, сервер не даст с констрейтами.

Ещё момент. Наивная уверенность в сохранности данных. Типа, если случайно что-то там грохнули, не беда это восстановить, просто вернув флаг. Но это не так. Нельзя вернуть никакую запись, которая участвует в формировании балансов, сумм, лимитов и прочего. Любая бизнес-система инкрементальная, каждая операция меняет её состояния, каждая операция основывается на состоянии. Если что-то просто «вернуть к жизни», значит все операции, которые были совершены после «удаления» нельзя считать корректными.

Потом. Писать запросы с учётом IsDeleted, строить отчёты, проводить какую-то аналитику, становится дорогим и затратным делом. Всё равно, что лазить в холодильник и выбирать какая колбаса свежая, из всего мусора, который там навален. И наклеечки «пропало» не улучшают ситуацию.

Но всё равно так делают. Много и часто. И не от большого ума, скорее прикрыть точку, ну и от бездарности и лени (не той, что делает разработчика профессионалом, а другой консистенции).

аргументировано. но это ответ на вопрос "почему это зло". я же хотел ответ на вопрос "как делать добро", ведь это действительно частое требование заказчика.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640400
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachhVosttпропущено...


Операция «Удаление» это удаление, оно должно приводить к удалению данных из системы. Что должен понять сотрудник глядя на запись с IsDeleted == true? Это что вообще значит? Случайно создали кривую запись и грохнули? Объект выведен из эксплуатации? Ошибка тёти Маши? Как это вообще отвечает целостности, за которую так божатся, выбирая SQL? Если записи нет, на неё сослаться нельзя, буквально физически, сервер не даст с констрейтами.

Ещё момент. Наивная уверенность в сохранности данных. Типа, если случайно что-то там грохнули, не беда это восстановить, просто вернув флаг. Но это не так. Нельзя вернуть никакую запись, которая участвует в формировании балансов, сумм, лимитов и прочего. Любая бизнес-система инкрементальная, каждая операция меняет её состояния, каждая операция основывается на состоянии. Если что-то просто «вернуть к жизни», значит все операции, которые были совершены после «удаления» нельзя считать корректными.

Потом. Писать запросы с учётом IsDeleted, строить отчёты, проводить какую-то аналитику, становится дорогим и затратным делом. Всё равно, что лазить в холодильник и выбирать какая колбаса свежая, из всего мусора, который там навален. И наклеечки «пропало» не улучшают ситуацию.

Но всё равно так делают. Много и часто. И не от большого ума, скорее прикрыть точку, ну и от бездарности и лени (не той, что делает разработчика профессионалом, а другой консистенции).

аргументировано. но это ответ на вопрос "почему это зло". я же хотел ответ на вопрос "как делать добро", ведь это действительно частое требование заказчика.

я, например, пришел к выводу, что такие "IsDeleted" - это фактически требование наличия лога, отличного от основной структуры БД
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640403
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachаргументировано. но это ответ на вопрос "почему это зло". я же хотел ответ на вопрос "как делать добро", ведь это действительно частое требование заказчика.

1. данные и правда надо хранить, по умолчанию, но не вместе с актуальными живыми данными
2. у любого объекта в информационной системе есть свой жизненный цикл, и вряд ли он заканчивается удалением, ну мне лично тяжело найти такой пример, если это не лог какой-нибудь, это может быть статус, рейндж дат начала/окончания или просто факт остаётся фактом навсегда
3. восстановление данных по сути это добавление заново со всеми вытекающими, или это переписывание истории, в маленьких системах (каких-нибудь АРМ-ах), можно и тупо восстанавливать меняя флаг, но в целом, это не верный подход, и такое умение не имеет ценности на перспективу, надо учиться делать правильно
4. вариантов как делать добро много, зависит от задач, технологий, методик, архитектуры и т.д.

основной принцип: никогда не храни актуальный живые данные со всяким мусором. куда ты будешь его складывать и как хранить, дело десятое.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640405
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachя, например, пришел к выводу, что такие "IsDeleted" - это фактически требование наличия лога, отличного от основной структуры БД

лог это немного другое. обычно лог для разбирательств. а IsDeleted для разбирательств, как пятая нога.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39640430
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachже хотел ответ на вопрос "как делать добро", ведь это действительно частое требование заказчика.не думайте вместе с заказчиком в терминах Запись.
Вот и все.
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39641962
Vladimirzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Может я ошибаюсь, но когда то кажется dbase жил на таких isDelete.
А еще есть ситуация когда со стороны заказчика выступает технический специалист который говорит "Хочу от такую структуру данных потому как формочкам этим вашим я не доверяю, а буду руками чо надо редактировать". И тут спор плавно перетекает в тему а стоит ли оно того, за какой проект браться и в каких условиях и.т.д. :)
...
Рейтинг: 0 / 0
ef core update вместо delete
    #39641964
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirzzzМожет я ошибаюсь, но когда то кажется dbase жил на таких isDelete.
Жил. В DBF структура линейная, типа классического массива, как следствие невозможно удалить запись из середины без сдвига всего массива, что дорого, поэтому придумали пометку на удаление вместо полноценного удаления.
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ef core update вместо delete
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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