Linq to sql - Как автоматически захватить идентификатор пользователя и обновить дату и время при вставке/обновлении?

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

Есть ли элегантный способ сделать это в linq to sql? На данный момент мы добавили метод Save ко всем нашим (частичным) классам, которые необходимо вызывать, но это вызывает проблемы, потому что не все наши разработчики помнят об использовании метода Save и все еще используют контекст для своих данных. операции доступа.

Кроме того, мы хотели бы сохранить эту логику вне базы данных, если мы можем помочь.


person Sonny Boy    schedule 10.08.2013    source источник


Ответы (1)


Вместо создания метода сохранения в разделяемых классах реализуйте метод OnValidate и установите там свои свойства.

public partial class MyClass
{
    partial void OnValidate(System.Data.Linq.ChangeAction action)
    {
        if (action == System.Data.Linq.ChangeAction.Insert)
        {
            LastUpdated = DateTime.Now;
            ChangedBy = "Me!";
        }

    }
}

Этот метод вызывается автоматически при отправке контекста данных.

person iamkrillin    schedule 10.08.2013
comment
Как бы вы привели пользователя туда? - person Pleun; 13.08.2013
comment
Зависит от вашего приложения. Вы сказали, что это веб-приложение, так что я могу представить по сеансу - person iamkrillin; 13.08.2013
comment
Это не мое приложение. Но обычно классы linq to sql находятся на уровне данных и не имеют доступа к сеансу... - person Pleun; 13.08.2013
comment
Ну, вы всегда можете создать исключение в методе OnValidate(), поэтому, если разработчик сделает это неправильно, то есть не вызовет ваш метод сохранения, ему об этом сообщат. - person iamkrillin; 13.08.2013