Можем ли мы добавить систематическое предложение WHERE в Entity Framework при запросе таблицы БД (IE Soft delete)? - PullRequest
0 голосов
/ 25 февраля 2019

Я только что добавил столбец IsValidRecord в таблицу MyClass SQL.Он будет использоваться как логическое удаление / мягкое удаление.Теперь мне нужно обновить приложение, чтобы запрашивать только действительные записи на основе нового столбца.

Сначала я использую Entity Frameword DB.Наше приложение использует бизнес-уровень, который централизует все методы, выбирающие элементы MyClass.Поэтому я обновил все методы, которые запрашивают соответствующую таблицу, с помощью соответствующего фильтра на основе IsValid.Он отлично работает.

Однако я вполне уверен, что это плохие практики, потому что разработчики забудут установить этот фильтр для новых методов, которые будут добавлены в будущем, что, очевидно, приведет к неправильным записям.

Интересно, будут ли в EF функции автоматической фильтрации запросов с помощью соответствующего фильтра "AND IsValid = 1"?

Раньше я работал в компании, которая делает то же самое с NHibernate.

Единственная поддерживаемая функция, которую я видел для EF, это: Мягкое удаление К сожалению, он перезаписывает OnModelCreating, поэтому я считаю, что он работает только для архитектуры Code First.Сначала мы используем базу данных, поэтому я думаю, что она не работает, так как OnModelCreating никогда не вызывается?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Лучшая ссылка, которую я нашел, это: Отображение EDMX Используйте EDMX-дизайнер, чтобы добавить условие фильтра.Это в основном именно то, что я хочу ...

Есть ли недостатки этого решения?На первый взгляд, это звучит достаточно хорошо для меня.

Единственный недостаток, о котором я могу думать, это то, что фильтр хорошо спрятан.Другим разработчикам в будущем может быть очень трудно понять, почему / где / как фильтруются сущности.

0 голосов
/ 25 февраля 2019

Я бы обычно реализовывал этот фильтр, используя специфичные для приложения представления в базе данных (в конце концов, для некоторых применений этих данных может потребоваться возможность просмотра удаленных элементов).

С простым определением представленияони должны автоматически считаться обновляемыми в SQL, поэтому вам не нужно писать триггеры для управления INSERT / UPDATE / DELETE операциями.Затем вы врете Entity Framework о том, что представляют собой его «таблицы», и в большинстве случаев это не должно быть ничего мудрым.

В зависимости от того, как вы хотите, чтобы программа soft-delete работала, вы можете скрыть существованиестолбец IsValidRow (нит: у нас есть строки в SQL, а не записи) в этом представлении и реализует триггер INSTEAD OF DELETE в представлении, позволяющий вашему приложению мягко удалять эти строки, прося EF удалить их.

...