|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Добрый день. EF Core. Возникло требование не удалять строки в базе а помечать как удаленные. Подскажите пожалуйста - есть ли способ сделать это как то автоматом, не засоряя модели признаком isDeleted и чтоб работало каскадное удаление (то есть каскадное выставление признака isDeleted ) Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 10:24 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Vladimirzzzне засоряя модели признаком isDeletedVladimirzzzкаскадное выставление признака isDeletedя один ничего не понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 10:39 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Добрый день. Я только залез в ef поэтому может не очень точно выражаюсь. Я так понимаю что могу получить нужный функционал добавив в модель property 'isDeleted' ну или что нибудь в этом роде и потом пользуясь только update ручками проставлять его у дочерних сущностей, при выборках не учитывать записи с isDeleted = true и.т.д. Но хочется сразу для всех сущностей подменить поведение что бы вместо удаления из базы была пометка записи как удаленной. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 11:15 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Vladimirzzzдобавив в модель property 'isDeleted'не надо. Он сам это делает. Если вы о псевдоудалении то забудьте. Переносите сущности в архив, но не делайте флаги "Как бы удалено" ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 11:57 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Petro123, Хранить удаленные записи - это требование заказчика ( как и подробное логирование изменений сущностей и пессимистичная блокировка и модерация изменений :) ) А какие минусы у псевдоудаленных записей кроме разбухания таблицы ? С архивом - дублировать все таблицы ? Или всю базу? Сразу возникает вопрос контроля куда ведут связи из архивной таблицы - в основную из актуальных таблиц или уже в архивную ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:26 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
делайте статусы в таблицах и меняйте их при "удалении" записей, это всё решается в вашем случаем бизнес логикой ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:28 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
VladimirzzzДобрый день. EF Core. Возникло требование не удалять строки в базе а помечать как удаленные. Подскажите пожалуйста - есть ли способ сделать это как то автоматом, не засоряя модели признаком isDeleted и чтоб работало каскадное удаление (то есть каскадное выставление признака isDeleted ) Спасибо Vladimirzzz, Руками: How to make soft delete in cascade with Entity Framework Core including navigation properties? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:39 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Vladimirzzz, ну и про глобальные фильтры почитайте... вроде здесь все вместе ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:41 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Konst_One, Ну да с isDeleted это и есть этот вариант. Но мне кажется что этим не нужно бы засорять бизнес логику так как удалять или помечать- это зависит от реализации хранилища, то есть относится к DAL и жить должно там. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:46 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
VladimirzzzKonst_One, Ну да с isDeleted это и есть этот вариант. Но мне кажется что этим не нужно бы засорять бизнес логику так как удалять или помечать- это зависит от реализации хранилища, то есть относится к DAL и жить должно там. Ну так и читайте про патерне матерны... если хотите "чистоты"... репозитории поки дто с автомапперами... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:50 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
VladimirzzzХранить удаленные записи - это требование заказчика (он же не сказал каким методом. Он слово запись не употреблял? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:52 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
VladimirzzzА какие минусы у псевдоудаленных записей кроме разбухания таблицы ?а как один ко многим будет работать? Когда в цикле по записям мастера пойдут запросы ленивые к чилдренам? А там из 100 детишек только 2 реальных. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:55 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
VladimirzzzС архивом - дублировать все таблицы ? Или всю базу? Сразу возникает вопрос контроля куда ведут связи из архивной таблицы - в основную из актуальных таблиц или уже в архивную ? Как вариант базы OLAP / OLTP Т.е. Закрыть опер день означает переместить накладные в другю базу или таблу. Денормализовав. Там целая ветка форума есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 12:59 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
buserНу так и читайте про патерне матерны... если хотите "чистоты"... репозитории поки дто с автомапперами... Нууу ... почти во всем хороша умеренность :) Спасибо - ссылки как раз то что нужно. Меня в гугле не забанили - я просто не сообразил что это "soft delete" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 13:04 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Vladimirzzz, и таки да... возможно есть поддержка на уровне движка вашей субд... как пример - Temporal Tables в ms sql ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 13:04 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Konst_Oneделайте статусы в таблицах и меняйте их при "удалении" записей, это всё решается в вашем случаем бизнес логикой Тут ef. Он сам не удаляет. Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 13:07 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Спасибо всем за советы. Вот может еще кому пригодится http://dotnetfalcon.com/entity-framework-logical-delete-part-one-intro-and-questions/ ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 13:12 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Petro123Konst_Oneделайте статусы в таблицах и меняйте их при "удалении" записей, это всё решается в вашем случаем бизнес логикой Тут ef. Он сам не удаляет. Код: c# 1.
ну и что, можно и апдейт сделать колонки статуса и выборку без статуса удалён и тд и тп ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 13:12 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Konst_One, Все можно. Но код будет адовый. Миграция адовая и FK работать не будет т.к. мастер вроде бы удален, а чилдрены нет. В общем надо смотреть что выираем. Если думаем что я могу вернуть сущность удаленную месяц назад, то нет. Чревато. У сущности куча связей. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 13:21 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Petro123Konst_One, Все можно. Но код будет адовый. Миграция адовая и FK работать не будет т.к. мастер вроде бы удален, а чилдрены нет. В общем надо смотреть что выираем. Если думаем что я могу вернуть сущность удаленную месяц назад, то нет. Чревато. У сущности куча связей. видно мы о разном: Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 13:27 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Konst_One, ToList убери и пройдись циклом. foreach ........ Чилдрены будут автоматом грузится все 100 штук или только актуальные? 2. Каскад будет работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:09 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Konst_One Код: c# 1.
и это убери. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:10 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Konst_One, У сущности Юзер есть машины, дети и долги. У долгов тоже есть каскад и FK. Как удалить юзверя со всем барахлом по каскаду? Как обеспечить проверку FK при псевдоудалении? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:14 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Petro123Konst_One Код: c# 1.
и это убери. проехали, мы о разном ... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:14 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Petro123Konst_One, У сущности Юзер есть машины, дети и долги. У долгов тоже есть каскад и FK. Как удалить юзверя со всем барахлом по каскаду? Как обеспечить проверку FK при псевдоудалении? не нужно ТСу физически удалять, ему нужно , чтобы физически эти данные в таблице оставались, я привёл пример , как это реализуется в бизнес-логике. ps tolist include etc тут не при чём, я про суть , что можно это решить через колонку статуса ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:17 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Konst_Oneпроехали, мы о разном ... Ок. Я за то чтобы в бизнес требованиях ставить галку Удален или Актуален или Уволен. Но не а все подряд таблицы. Ты наверно про это. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:17 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
VladimirzzzДобрый день. EF Core. Возникло требование не удалять строки в базе а помечать как удаленные. Подскажите пожалуйста - есть ли способ сделать это как то автоматом, не засоряя модели признаком isDeleted и чтоб работало каскадное удаление (то есть каскадное выставление признака isDeleted ) Спасибо НЕТ. нельзя. точнее, попытайся что-то изобразить и на простетских примерах что-то да получится, но граблей столько, что не оберёшься. IsDeleted натуральное зло, тупейший костыль, которым грешат нубасы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:42 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
hVosttIsDeleted натуральное зло, тупейший костыль, которым грешат нубасы.+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 14:56 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
hVosttVladimirzzzДобрый день. EF Core. Возникло требование не удалять строки в базе а помечать как удаленные. Подскажите пожалуйста - есть ли способ сделать это как то автоматом, не засоряя модели признаком isDeleted и чтоб работало каскадное удаление (то есть каскадное выставление признака isDeleted ) Спасибо НЕТ. нельзя. точнее, попытайся что-то изобразить и на простетских примерах что-то да получится, но граблей столько, что не оберёшься. IsDeleted натуральное зло, тупейший костыль, которым грешат нубасы. Правильно! Надо IsActive ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 15:01 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
skyANAПравильно! Надо IsActive Шутка не удалась ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 15:14 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Вообще этому решению сто лет в обед. Как-то тётя Маша случайно удалила записи об отгрузке нефти на кругленькую сумму денег и тут же возникло требование ни фига из базы физически не удалять. Требование было реализовано. Понятно, что с того времени появились лучшие варианты не потерять важные данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 15:30 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
skyANAВообще этому решению сто лет в обед. Как-то тётя Маша случайно удалила записи об отгрузке нефти на кругленькую сумму денег и тут же возникло требование ни фига из базы физически не удалять. «Ничего физически не удалять» и так называемый флаг «удаления», который можно встретить в овер 80% системах, это не одно и то же :) skyANAТребование было реализовано. Это понятно. Но как и многие плохие привычки, исходят из какой-то разовой необходимости, потом остаются надолго и кочуют из проекта в проект, просто бездумно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 19:48 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
hVosttIsDeleted натуральное зло, тупейший костыль, которым грешат нубасы. а что не зло? как делают не нубасы? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 20:26 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
love_bach, Вроде весь топик в ответах) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 20:33 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
love_bachhVosttIsDeleted натуральное зло, тупейший костыль, которым грешат нубасы. а что не зло? как делают не нубасы? Операция «Удаление» это удаление, оно должно приводить к удалению данных из системы. Что должен понять сотрудник глядя на запись с IsDeleted == true? Это что вообще значит? Случайно создали кривую запись и грохнули? Объект выведен из эксплуатации? Ошибка тёти Маши? Как это вообще отвечает целостности, за которую так божатся, выбирая SQL? Если записи нет, на неё сослаться нельзя, буквально физически, сервер не даст с констрейтами. Ещё момент. Наивная уверенность в сохранности данных. Типа, если случайно что-то там грохнули, не беда это восстановить, просто вернув флаг. Но это не так. Нельзя вернуть никакую запись, которая участвует в формировании балансов, сумм, лимитов и прочего. Любая бизнес-система инкрементальная, каждая операция меняет её состояния, каждая операция основывается на состоянии. Если что-то просто «вернуть к жизни», значит все операции, которые были совершены после «удаления» нельзя считать корректными. Потом. Писать запросы с учётом IsDeleted, строить отчёты, проводить какую-то аналитику, становится дорогим и затратным делом. Всё равно, что лазить в холодильник и выбирать какая колбаса свежая, из всего мусора, который там навален. И наклеечки «пропало» не улучшают ситуацию. Но всё равно так делают. Много и часто. И не от большого ума, скорее прикрыть точку, ну и от бездарности и лени (не той, что делает разработчика профессионалом, а другой консистенции). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 20:37 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
hVosttlove_bachпропущено... а что не зло? как делают не нубасы? Операция «Удаление» это удаление, оно должно приводить к удалению данных из системы. Что должен понять сотрудник глядя на запись с IsDeleted == true? Это что вообще значит? Случайно создали кривую запись и грохнули? Объект выведен из эксплуатации? Ошибка тёти Маши? Как это вообще отвечает целостности, за которую так божатся, выбирая SQL? Если записи нет, на неё сослаться нельзя, буквально физически, сервер не даст с констрейтами. Ещё момент. Наивная уверенность в сохранности данных. Типа, если случайно что-то там грохнули, не беда это восстановить, просто вернув флаг. Но это не так. Нельзя вернуть никакую запись, которая участвует в формировании балансов, сумм, лимитов и прочего. Любая бизнес-система инкрементальная, каждая операция меняет её состояния, каждая операция основывается на состоянии. Если что-то просто «вернуть к жизни», значит все операции, которые были совершены после «удаления» нельзя считать корректными. Потом. Писать запросы с учётом IsDeleted, строить отчёты, проводить какую-то аналитику, становится дорогим и затратным делом. Всё равно, что лазить в холодильник и выбирать какая колбаса свежая, из всего мусора, который там навален. И наклеечки «пропало» не улучшают ситуацию. Но всё равно так делают. Много и часто. И не от большого ума, скорее прикрыть точку, ну и от бездарности и лени (не той, что делает разработчика профессионалом, а другой консистенции). аргументировано. но это ответ на вопрос "почему это зло". я же хотел ответ на вопрос "как делать добро", ведь это действительно частое требование заказчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 20:51 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
love_bachhVosttпропущено... Операция «Удаление» это удаление, оно должно приводить к удалению данных из системы. Что должен понять сотрудник глядя на запись с IsDeleted == true? Это что вообще значит? Случайно создали кривую запись и грохнули? Объект выведен из эксплуатации? Ошибка тёти Маши? Как это вообще отвечает целостности, за которую так божатся, выбирая SQL? Если записи нет, на неё сослаться нельзя, буквально физически, сервер не даст с констрейтами. Ещё момент. Наивная уверенность в сохранности данных. Типа, если случайно что-то там грохнули, не беда это восстановить, просто вернув флаг. Но это не так. Нельзя вернуть никакую запись, которая участвует в формировании балансов, сумм, лимитов и прочего. Любая бизнес-система инкрементальная, каждая операция меняет её состояния, каждая операция основывается на состоянии. Если что-то просто «вернуть к жизни», значит все операции, которые были совершены после «удаления» нельзя считать корректными. Потом. Писать запросы с учётом IsDeleted, строить отчёты, проводить какую-то аналитику, становится дорогим и затратным делом. Всё равно, что лазить в холодильник и выбирать какая колбаса свежая, из всего мусора, который там навален. И наклеечки «пропало» не улучшают ситуацию. Но всё равно так делают. Много и часто. И не от большого ума, скорее прикрыть точку, ну и от бездарности и лени (не той, что делает разработчика профессионалом, а другой консистенции). аргументировано. но это ответ на вопрос "почему это зло". я же хотел ответ на вопрос "как делать добро", ведь это действительно частое требование заказчика. я, например, пришел к выводу, что такие "IsDeleted" - это фактически требование наличия лога, отличного от основной структуры БД ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 20:53 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
love_bachаргументировано. но это ответ на вопрос "почему это зло". я же хотел ответ на вопрос "как делать добро", ведь это действительно частое требование заказчика. 1. данные и правда надо хранить, по умолчанию, но не вместе с актуальными живыми данными 2. у любого объекта в информационной системе есть свой жизненный цикл, и вряд ли он заканчивается удалением, ну мне лично тяжело найти такой пример, если это не лог какой-нибудь, это может быть статус, рейндж дат начала/окончания или просто факт остаётся фактом навсегда 3. восстановление данных по сути это добавление заново со всеми вытекающими, или это переписывание истории, в маленьких системах (каких-нибудь АРМ-ах), можно и тупо восстанавливать меняя флаг, но в целом, это не верный подход, и такое умение не имеет ценности на перспективу, надо учиться делать правильно 4. вариантов как делать добро много, зависит от задач, технологий, методик, архитектуры и т.д. основной принцип: никогда не храни актуальный живые данные со всяким мусором. куда ты будешь его складывать и как хранить, дело десятое. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 21:03 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
love_bachя, например, пришел к выводу, что такие "IsDeleted" - это фактически требование наличия лога, отличного от основной структуры БД лог это немного другое. обычно лог для разбирательств. а IsDeleted для разбирательств, как пятая нога. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 21:04 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
love_bachже хотел ответ на вопрос "как делать добро", ведь это действительно частое требование заказчика.не думайте вместе с заказчиком в терминах Запись. Вот и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2018, 21:59 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
Добрый день. Может я ошибаюсь, но когда то кажется dbase жил на таких isDelete. А еще есть ситуация когда со стороны заказчика выступает технический специалист который говорит "Хочу от такую структуру данных потому как формочкам этим вашим я не доверяю, а буду руками чо надо редактировать". И тут спор плавно перетекает в тему а стоит ли оно того, за какой проект браться и в каких условиях и.т.д. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2018, 12:47 |
|
ef core update вместо delete
|
|||
---|---|---|---|
#18+
VladimirzzzМожет я ошибаюсь, но когда то кажется dbase жил на таких isDelete. Жил. В DBF структура линейная, типа классического массива, как следствие невозможно удалить запись из середины без сдвига всего массива, что дорого, поэтому придумали пометку на удаление вместо полноценного удаления. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2018, 12:51 |
|
|
start [/forum/topic.php?all=1&fid=17&tid=1349198]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 233ms |
total: | 402ms |
0 / 0 |