Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EntityFramework DBContext审核中出错_C#_Entity Framework 5 - Fatal编程技术网

C# EntityFramework DBContext审核中出错

C# EntityFramework DBContext审核中出错,c#,entity-framework-5,C#,Entity Framework 5,我的目标是同时创建保存和审核日志。当在实体条目状态改变后运行应用程序var result=base.SaveChnages()时,如何克服这个问题,任何人都可以帮助解决 public override int SaveChanges() { ChangeTracker.DetectChanges(); using (var scope = new TransactionScope()) { var obje

我的目标是同时创建保存和审核日志。当在实体条目状态改变后运行应用程序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;
        }
    }
public override int SaveChanges()
{
ChangeTracker.DetectChanges();
使用(var scope=new TransactionScope())
{
var objectStateManager=((IObjectContextAdapter)this).ObjectContext.objectStateManager;
var modifiedAuditableEntities=
objectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added)。其中(
e=>(IAuditable)e.实体!=null);
var result=base.SaveChanges();
foreach(modifiedAuditableEntities中的var条目)
{
var entity=(IAuditable)entry.entity;
如果(实体!=null)
{
开关(进入状态)
{
案例实体状态。添加:
entity.IsAdded=true;
打破
案例实体状态。已删除:
entity.IsDeleted=true;
打破
案例实体状态。已修改:
entity.IsModified=true;
打破
}
this.EntitySet().Add(
this.auditLogService.CreateAuditLogEntryForEntity((IAuditable)entry.Entity));
}
}
base.SaveChanges();
scope.Complete();
返回结果;
}
}

重写“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);
        }      
     }  
}
公共部分类MyDataModel
{
部分无效OnContextCreated()
{
this.SavingChanges+=新的事件处理程序(CreateAuditLog);
}
void CreateAuditLog(对象发送方,事件参数e)
{
var changes=this.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted | EntityState.Modified);
如果(!changes.Any())
返回;
var auditDataList=新列表();
foreach(更改中的ObjectStateEntry StatentryEntity)
{
如果(!statentryEntity.IsRelationship&&statentryEntity.Entity!=null&&!(statentryEntity.Entity是AuditLogEntry))
{
var audit=新的AuditLogEntry();
auditDataList.Add(审计);
}
}
如果(auditDataList.Count>0)
{
foreach(auditDataList中的var审计)
本附录添加至审计(审计);
}      
}  
}