using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Web; using Audit.Core; using System.Collections; namespace EnVisage.Code.AuditEngine { public sealed class AuditRuntime { private static volatile AuditRuntime _runtime; private static readonly object _sync = new object(); private AuditRuntime() { } public static AuditRuntime Init() { if (_runtime == null) { lock (_sync) { if (_runtime == null) { string connectionString = null; if (ConfigurationManager.ConnectionStrings["AuditConnection"] != null) connectionString = ConfigurationManager.ConnectionStrings["AuditConnection"].ConnectionString; if (string.IsNullOrWhiteSpace(connectionString)) throw new ConfigurationErrorsException("Audit connection string is not set"); Audit.Core.Configuration.Setup() .UseSqlServer(config => config .ConnectionString(connectionString) .Schema("dbo") .TableName("Event") .IdColumnName("EventId") .JsonColumnName("Data") .LastUpdatedColumnName("LastUpdatedDate")); Audit.EntityFramework.Configuration.Setup() .ForAnyContext(t => t.IncludeEntityObjects(false)) .UseOptOut() .IgnoreAny(t => t.BaseType is ICollection); _runtime = new AuditRuntime(); } } } return _runtime; } public static AuditScope CreateScope() { var options = new Audit.Core.AuditScopeOptions { CreationPolicy = Audit.Core.EventCreationPolicy.InsertOnEnd, AuditEvent = new Audit.Core.AuditEvent() }; var scope = Audit.Core.AuditScope.Create(options); return scope; } } }