EnVisageOnline/Main/Source/EnVisage/Code/Audit/AuditRuntime.cs

62 lines
2.3 KiB
C#

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<Scenario>);
_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;
}
}
}