Регистрация изменений в C # / SQL - лучшие методы - PullRequest
2 голосов
/ 06 марта 2012

Не уверен, подходит ли этот вопрос для StackOverflow, поскольку он гораздо более «общий». По сути, у меня есть бизнес-приложение на основе базы данных, созданное на ASP.NET и C #, которым будут пользоваться около 20 членов компании. Важнейшим аспектом этого является аудит - мне нужно регистрировать любые изменения в любой из таблиц, и их должны просматривать старшие сотрудники.

Мое текущее решение использует триггеры SQL, но мне нужно создать нечто более надежное и удобное для пользователя. База данных гигантская, с множеством таблиц отношений и т. Д., И аудиты в настоящее время очень неинформативны для пользователей - сообщать персоналу, что x пользователь изменил заказ, чтобы иметь клиента с идентификатором 837, почти бесполезно - мне нужно уметь определять, какое поле отображается в журнале аудита.

Моя идея состоит в том, чтобы создать класс в моем коде, который будет обрабатывать все это и каким-то образом отображать, какие поля отображать пользователю, а также каким-то образом сообщать коду, какая таблица была изменена и какая запись.

Может ли кто-нибудь дать общий совет о том, как делать то, что я хочу, и действительно ли это возможно? Я большой пользователь LINQ-to-SQL в своем коде, поэтому я надеюсь, что это поможет ...

Ответы [ 3 ]

1 голос
/ 06 марта 2012

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

What table was modified?
What fields changed?
Who made the change?
When did it occur? 

Вы можете найти его здесь: http://doddleaudit.codeplex.com/

0 голосов
/ 06 марта 2012

Вы также можете попробовать использовать функцию захвата данных в SQL Server 2008.Он в основном захватывает вставки, обновления и удаления в желаемых таблицах и сохраняет изменения, сделанные в отдельном наборе реляционных таблиц.

http://www.mssqltips.com/sqlservertip/1474/using-change-data-capture-cdc-in-sql-server-2008/

0 голосов
/ 06 марта 2012

У меня были аналогичные требования аудита для приложения здравоохранения, которое использовало linq-to-sql для доступа к данным.

Один из способов сделать это централизованно в Linq-to-sql - переопределить SubmitChangesв классе контекста данных.Перед отправкой изменений позвоните GetChangeSet(), чтобы получить данные об ожидающих изменениях.Затем добавьте соответствующую информацию отслеживания изменений в соответствующую таблицу журнала перед вызовом base.SubmitChanges().В моем приложении я использовал столбец xml, чтобы иметь возможность структурированным образом хранить данные изменений для разных таблиц, не создавая специальных таблиц истории для каждой таблицы в системе.

...