Регистрация изменений с помощью LINQ to SQL - PullRequest
3 голосов
/ 23 февраля 2011

В системе, которую я создаю, клиент требует, чтобы все изменения данных регистрировались в таблице базы данных - при этом регистрируются только изменения (т. Е. Если они изменяют только 1 значение в форме, заполненной 10 полями, это будет толькоревизия, что одно изменение).По сути, мне нужно иметь возможность сравнивать старые значения с новыми.

Это, конечно, просто - я делал это раньше, но это было довольно грязно - я бы вручную проверял каждое поле вбазы данных и сравните ее с новой, чтобы решить, следует ли проводить аудит.Есть ли более простой способ, возможно, автоматически получить измененное имя / значения столбца?Или я должен делать это «грязным» способом?

Практически все регистрируемые изменения выполняются с использованием LINQ to SQL - так что, возможно, есть способ сравнить таблицу базы данных с модифицированной,перед звонком отправить изменения?

Ответы [ 4 ]

2 голосов
/ 23 февраля 2011

Я использовал статью о проекте кода под названием Автоматическая регистрация событий в LINQ .Это очень хорошо сработало для нас, оно также выполняет то, что вы просили, только регистрируя изменения.Если запись вставлена, каждое обновление отображается как отдельная строка в базе данных, отслеживающая PK, имя поля, старое значение и новое значение.Конечно, это также отслеживает, кто выполнил действие и когда.Он отслеживает все действия: создание, чтение, обновление и удаление.

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

0 голосов
/ 23 февраля 2011

Я использовал http://doddleaudit.codeplex.com/ с большим успехом.

Он прост в настройке и добавляет «автоматическую» регистрацию в ваш контекст данных.

0 голосов
/ 23 февраля 2011

См. CDC (изменить сбор данных) в Sql Server, может помочь. IIRC, он был представлен в MSSQL2008. Но это на уровне базы данных! Так что может не квалифицироваться как ответ! Надеюсь, это поможет.

0 голосов
/ 23 февраля 2011

Есть ли возможность сделать это на уровне БД? Это может быть полезно в этом случае.

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