Linq-to-SQL Как предотвратить использование методов удаления?

По соглашению наша БД позволяет использовать хранимые процедуры только для INSERT, UPDATE и DELETE. Для некоторых таблиц / типов нет хранимой процедуры DELETE, потому что ей нельзя удалять строки. (Вы можете только обновить статус такого типа до «удален»). например клиент может быть помечен как удаленный, но никогда не удаляется из БД.

Как предотвратить использование Delete () для определенных типов на уровне доступа к данным = в DMBL?

«Методы по умолчанию» для вставки и обновления сопоставляются с соответствующей хранимой процедурой. Но для удаления указано "использовать время выполнения". Я бы хотел установить его на «не разрешено».

Есть ли способ добиться этого на уровне модели БД?

Большое спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
708
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Реализуйте частичный класс для каждой такой сущности и реализуйте частичный метод OnValidate. В качестве параметра требуется ChangeAction. Когда ChangeAction имеет значение ChangeAction.Delete, генерировать исключение, указывающее, что операция запрещена (возможно, IllegalOperationException).

API удаления не создается, я имею в виду, что параметр в сгенерированной таблице не может удалить возможность пометить элемент как удаленный. DeleteOnSubmit является частью класса Table<TEntity>.

Если удаление объекта всегда является ошибкой, OnValidate должен выдать InvalidOperationException, как предлагает tvanfosson.

Я попытался сопоставить Linq с удалениями Sql с хранимыми процедурами, которые просто устанавливают для поля значение true. Это становится странным, потому что DataContext удаляет экземпляры после «удаления», но они являются юридическими объектами домена и должны оставаться в DataContext после отправки.

У меня было такое же ограничение при разработке одного из моих приложений. Вы всегда можете настроить действие удаления для использования определенной хранимой процедуры вместо того, чтобы платформа генерировала для нее команду sql. В моем случае, когда я говорю «удалить», мы просто хотели пометить определенную строку как удаленную, но не удаляли ее физически. Таким образом, наша хранимая процедура обновления была повторно использована в команде удаления, чтобы просто пометить значение столбца isDeleted как истинное. Кроме того, вы можете создать некую оболочку для классов, созданных с помощью DBML, и запретить использование методов удаления. Прямо сейчас я не вижу каких-либо специальных настроек, позволяющих фреймворку генерировать только методы создания и обновления. Частичные занятия могут быть еще одной альтернативой.

Как насчет настройки прав для пользователя, которого вы используете для подключения к БД? Вы можете установить Запретить операцию удаления для этого конкретного пользователя, чтобы было невозможно использовать оператор DELETE на уровне БД.

Другие вопросы по теме