Я пытался заставить Audit.Net работать для моего проекта MVC EF 6.2. У меня все настроено и я могу сохранить свои журналы аудита в моей таблице sql server. У меня проблема с объектами, которые напрямую возвращаются из моего контекста БД. EF создает динамический тип прокси для таких объектов, и по какой-то причине при использовании в качестве целевого объекта в моей области аудита он просто зависает в операторе using безкогда-либо входя в блок использования и никакие исключения / ошибки не обнаруживаются. Просто там висит и ничего не происходит.
Все работает для объектов, которые возвращаются из моих сервисов webapi / wcf как DTO.
Моя настройка в Global.asax
Audit.Core.Configuration.Setup()
.UseSqlServer(config => config
.ConnectionString(ConfigurationManager.ConnectionStrings["DBContext"].ConnectionString)
.Schema("dbo")
.TableName("SystemEvents")
.IdColumnName("EventId")
.JsonColumnName("Data")
.LastUpdatedColumnName("LastUpdatedDate"));
Код для области аудита:
var record = _context.FileRecord.Include(a => a.Contact).SingleOrDefault(c => c.Id == id);
using(var audit = AuditScope.Create(new AuditScopeOptions
{ DataProvider = new SqlDataProvider { // settings here },
EventType = "Update",
TargetGetter = () => FileRecord
}) <--- hangs right here and never executes the code inside the brackets
{
record.ContactId = 33
// more properties to be updated
}
_context.SaveChanges();
Моя модель таблицы:
public class FileRecord
{
public int Id { get; set; }
// more members
// Have references to other tables here
public virtual ICollection<StageHistory> StageHistories { get; set; }
public virtual Contact Contact { get; set; }
}
Это похоже на проблему с EF, создающим типы прокси, потому что я могу заставить это работать, еслиЯ просто устанавливаю для целевого объекта значение null или создаю совершенно новый экземпляр объекта, например () => new FileRecord (), чтобы получить реальный объект-сущность, а не прокси-версию, но при этом я не смогу сохранитьотслеживание старых и новых изменений на объекте.
Любая помощь будет оценена, спасибо.