[英]WCF Service with EntityFramework, giving error “The type 'DBContext' is defined in an assembly that is not referenced”
[英]Error in EntityFramework DBContext Audit
我的目标是保存和同时创建审核日志。 实体条目状态更改后运行应用程序var result = base.SaveChnages()时,如何克服这一问题,任何人都可以寻求帮助
public override int SaveChanges()
{
ChangeTracker.DetectChanges();
using (var scope = new TransactionScope())
{
var objectStateManager = ((IObjectContextAdapter) this).ObjectContext.ObjectStateManager;
var modifiedAuditableEntities =
objectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added).Where(
e => (IAuditable) e.Entity != null);
var result = base.SaveChanges();
foreach (var entry in modifiedAuditableEntities)
{
var entity = (IAuditable) entry.Entity;
if (entity != null)
{
switch (entry.State)
{
case EntityState.Added:
entity.IsAdded = true;
break;
case EntityState.Deleted:
entity.IsDeleted = true;
break;
case EntityState.Modified:
entity.IsModified = true;
break;
}
this.EntitySet<AuditLogEntry>().Add(
this.auditLogService.CreateAuditLogEntryForEntity((IAuditable) entry.Entity));
}
}
base.SaveChanges();
scope.Complete();
return result;
}
}
覆盖“ OnContextCreated”方法并绑定“ SaveChanges”事件处理程序,如下所示:
public partial class MyDataModel
{
partial void OnContextCreated()
{
this.SavingChanges += new EventHandler(CreateAuditLog);
}
void CreateAuditLog(object sender, EventArgs e)
{
var changes = this.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted | EntityState.Modified);
if (!changes.Any())
return;
var auditDataList = new List<AuditLogEntry>();
foreach (ObjectStateEntry stateEntryEntity in changes)
{
if (!stateEntryEntity.IsRelationship && stateEntryEntity.Entity != null && !(stateEntryEntity.Entity is AuditLogEntry))
{
var audit = new AuditLogEntry();
auditDataList.Add(audit);
}
}
if (auditDataList.Count > 0)
{
foreach (var audit in auditDataList)
this.AddToAuditLogEntries(audit);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.