Linq-to-SQL Как предотвратить использование методов Delete? - PullRequest
4 голосов
/ 16 ноября 2008

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

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 16 ноября 2008

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

1 голос
/ 16 ноября 2008

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

1 голос
/ 16 ноября 2008

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

0 голосов
/ 16 ноября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...