Обязанности разработчика при переопределении поведения по умолчанию

LINQ to SQL не применяет следующие требования, но поведение не определено, если эти требования не выполнены.

  • Метод переопределения не должен вызывать SubmitChanges или Attach. LINQ to SQL создает исключение, если эти методы вызываются в методе переопределения.

  • Переопределённые методы нельзя использовать для запуска, фиксации или остановки транзакции. Операция SubmitChanges выполняется в рамках транзакции. Внутренняя вложенная транзакция может повлиять на внешнюю транзакцию. Методы переопределения загрузки могут запускать транзакцию только после того, как они определяют, что операция не выполняется в Transaction.

  • Предполагается, что методы переопределения будут соответствовать применимому сопоставлению оптимистических параллелизмов. Ожидается, что метод переопределения бросает исключение ChangeConflictException, когда возникает конфликт оптимистичного параллелизма. LINQ to SQL перехватывает это исключение, чтобы вы могли правильно обработать указанный SubmitChangesSubmitChangesпараметр.

  • Предполагается, что методы создания (Insert) и Update переопределения возвращают значения для созданных базой данных столбцов соответствующим членам объекта при успешном завершении операции.

    Например, если сопоставляется со столбцом идентификаторов (автоинкрементный первичный ключ ), то переопределенный метод должен получить идентификатор, созданный базой данных, и присвоить его элементу . Аналогичным образом элементы метки времени необходимо обновить до значений метки времени, созданных базой данных, чтобы убедиться, что обновленные объекты согласованы. Сбой распространения созданных базой данных значений может привести к несоответствию между базой данных и объектами, отслеживаемыми данными DataContext.

  • Это ответственность пользователя за вызов правильного динамического API. Например, в методе переопределения обновления можно вызывать только ExecuteDynamicUpdate. LINQ to SQL не обнаруживает или проверяет, соответствует ли вызываемая динамическая операция. Если вызывается неопланимый метод (например, ExecuteDynamicDelete для обновляемого объекта), результаты не определены.

  • Ожидается, что переопределённый метод будет выполнять указанную операцию. Семантика операций LINQ to SQL, таких как жадная загрузка, отложенная загрузка и SubmitChanges, требует переопределения для предоставления указанной службы. Например, переопределение нагрузки, которое просто возвращает пустую коллекцию без проверки содержимого в базе данных, скорее всего, приведет к несогласованным данным.

См. также