Проверяйте Linq2Sql перед SubmitChanges () - PullRequest
6 голосов
/ 31 июля 2009

Может кто-нибудь сказать мне, если / как вы можете проверить изменения в контексте данных в Linq2Sql перед вызовом SubmitChanges (). У меня возникает ситуация, когда я создаю контекст, выполняю несколько операций и добавляю множество вставок наряду с другими задачами обработки, а затем откатываю, если отправка не удалась.

Что бы я предпочел сделать, это сделать какой-то вызов «Validate ()» после выполнения определенных задач, чтобы я мог обработать его перед отправкой всей работы.

Ответы [ 2 ]

6 голосов
/ 31 июля 2009

Чтобы получить все изменения в контексте данных, вы можете позвонить

ChangeSet changes = dataContext.GetChangeSet();

// An IList<Object>
changes.Deletes;
changes.Inserts;
changes.Updates;

Что у меня есть, так это то, что у каждого объекта-значения есть метод validate. Я использую атрибуты для определения различных видов проверки. Причина, по которой я делаю это вручную, заключается в том, что если у меня есть число, которое может быть int в базе данных и коде, значение 1002 может быть недействительным, если я сохраню возраст. Так что я могу дать диапазон значений и т. Д. ,

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

Я бы сказал, чтобы это сработало, вам придется либо редактировать сгенерированный код, либо свернуть свои собственные объекты значений. Обычно я делаю свои собственные из-за того, как я использую их для проверки.

5 голосов
/ 07 августа 2009

Вы также можете использовать функцию OnValidate() с частичным классом сущности LINQ-to-SQL. OnValidate() будет вызываться во время SubmitChanges(), но перед отправкой данных в базу данных. В OnValidate() есть одна приятная вещь: вы можете различить действие CRUD по перечислению ChangeAction.

Например,

public partial class YourEntity
{
    partial void OnValidate(System.Data.Linq.ChangeAction action)
    {
        if(action == System.Data.Linq.ChangeAction.Insert)
           // Do insert
        ... etc. ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...