Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Entity framework Audit.NET实体框架对两个表中的一个相同条目进行审核_Entity Framework_Audit_Audit.net - Fatal编程技术网

Entity framework Audit.NET实体框架对两个表中的一个相同条目进行审核

Entity framework Audit.NET实体框架对两个表中的一个相同条目进行审核,entity-framework,audit,audit.net,Entity Framework,Audit,Audit.net,我有两个审计表,一个是Audit_ProfileFan,第二个是Audit_StatusChanges 第一个表AuditProfileFan应该在每次更新或插入ProfileFan表时进行审核。 第二次审核\u StatusChanges应仅在更新某列FanStatusId时进行审核 Audit.Core.Configuration.Setup() .UseEntityFramework(ef => ef.AuditTypeExplicitMapper(m => m

我有两个审计表,一个是Audit_ProfileFan,第二个是Audit_StatusChanges 第一个表
AuditProfileFan
应该在每次更新或插入ProfileFan表时进行审核。 第二次审核\u StatusChanges应仅在更新某列FanStatusId时进行审核

Audit.Core.Configuration.Setup() .UseEntityFramework(ef => ef.AuditTypeExplicitMapper(m => m
        .Map<FanActivity, Audit_FanActivity>((fanActivity, auditFanActivity) =>
        {
            auditFanActivity.ProfileFanId = fanActivity.ProfileFanId;
            auditFanActivity.ActivityId = auditFanActivity.ActivityId;

        })
        .Map<DeliveryActions, Audit_DeliveryActions>((deliveryAction, auditDeliveryAction) =>
        {
            auditDeliveryAction.ProfileFanId = deliveryAction.FanId;
            auditDeliveryAction.DeliveryActionId = deliveryAction.DeliveryActionId;
        })
        .Map<Fan, Audit_Fan>()
        .Map<ProfileFan, Audit_StatusChanges>((profileFan, auditStatusChanges) =>
        {
            auditStatusChanges.ProfileFanId = profileFan.Id;
            //auditStatusChanges.OriginalValue = profileFan.FanStatusId;
            //auditStatusChanges.NewValue = profileFan.FanStatusId;
        })
        .Map<ProfileFan, Audit_ProfileFan>((profileFan, auditProfileFan) =>
        {
            auditProfileFan.ProfileFanId = profileFan.Id;
            auditProfileFan.FanId = profileFan.FanId;
            auditProfileFan.EmailResponseStatusId = profileFan.EmailResponseStatusId;
            auditProfileFan.FanStatusId = profileFan.FanStatusId;
        })
        .Map<TagFan, Audit_TagFan>((tagFan, auditTagFan) =>
        {
            auditTagFan.ProfileFanId = tagFan.ProfileFanId;
            auditTagFan.TagId = tagFan.TagId;
        })
        .AuditEntityAction<IAuditLog>((evt, entry, auditEntity) =>
        {
            if(entry.Table=="ProfileFan" && entry.Action=="Update")
            {
                //auditEntity.OriginalValue = profileFan.FanStatusId;
                //auditEntity.NewValue = profileFan.FanStatusId;
            }

            auditEntity.AuditDate = DateTime.Now;
            auditEntity.AuditUser = evt.Environment.UserName;
            auditEntity.Action = entry.Action; // Insert, Update, Delete
            auditEntity.AuditUsername = HttpContext.Current.User.Identity.Name;
        })
    )
);
Audit.Core.Configuration.Setup()
.Map((fanActivity,auditFanActivity)=>
{
auditFanActivity.ProfileFanId=fanActivity.ProfileFanId;
auditFanActivity.ActivityId=auditFanActivity.ActivityId;
})
.Map((deliveryAction,auditDeliveryAction)=>
{
auditDeliveryAction.ProfileFanId=deliveryAction.FanId;
auditDeliveryAction.DeliveryActionId=deliveryAction.DeliveryActionId;
})
.Map()
.Map((profileFan,auditStatusChanges)=>
{
auditStatusChanges.ProfileFanId=profileFan.Id;
//auditStatusChanges.OriginalValue=profileFan.FanStatusId;
//auditStatusChanges.NewValue=profileFan.FanStatusId;
})
.Map((profileFan,auditProfileFan)=>
{
auditProfileFan.ProfileFanId=profileFan.Id;
auditProfileFan.FanId=profileFan.FanId;
auditProfileFan.EmailResponseStatusId=profileFan.EmailResponseStatusId;
auditProfileFan.FanStatusId=profileFan.FanStatusId;
})
.Map((tagFan,auditTagFan)=>
{
auditTagFan.ProfileFanId=tagFan.ProfileFanId;
auditTagFan.TagId=tagFan.TagId;
})
.AuditEntityAction((evt、条目、auditEntity)=>
{
if(entry.Table==“ProfileFan”&&entry.Action==“Update”)
{
//auditEntity.OriginalValue=profileFan.FanStatusId;
//auditEntity.NewValue=profileFan.FanStatusId;
}
auditEntity.AuditDate=DateTime.Now;
auditEntity.AuditUser=evt.Environment.UserName;
auditEntity.Action=entry.Action;//插入、更新、删除
auditEntity.AuditUsername=HttpContext.Current.User.Identity.Name;
})
)
);
但每次进行更新时,它只审核一个表(在本例中为Audit_ProfileFan)


我的需求是否可能,或者我是否应该进行某种变通?

对于当前版本的,这是不可能的,因为您只能从已知的实体类型进行映射,而不能从其他类型进行映射

但是我找到了一种方法,通过添加一个新的
Map
重载,允许您将最终审核类型指定为的函数,从而可以将相同的输入数据类型映射到多个输出审核类型,具体取决于修改的条目

例如,您可以根据SQL操作(插入/更新)将
ProfileFan
映射到不同的表,如下所示:

Audit.Core.Configuration.Setup() 
    .UseEntityFramework(ef => ef.AuditTypeExplicitMapper(m => m
        .Map<ProfileFan>(
            mapper: entry => entry.Action == "Insert" ? typeof(Audit_ProfileFan) : typeof(Audit_StatusChanges), 
            entityAction: (ev, entry, entity) =>
            {
                if (entity is Audit_ProfileFan pf)
                {
                    // action for profile fan
                    // pf.xxxx = ...;
                }
                else if (entity is Audit_StatusChanges ss)
                {
                    // action for status changes
                    // ss.xxxx = ...;
                }
            })
        .Map<TagFan, Audit_TagFan>(/*...*/)
        .AuditEntityAction<IAuditLog>((evt, entry, auditEntity) =>
        {
            // common action...
        })));
Audit.Core.Configuration.Setup()
.UseEntityFramework(ef=>ef.AuditTypeExplicitMapper(m=>m
.地图(
映射器:entry=>entry.Action==“Insert”?typeof(Audit\u ProfileFan):typeof(Audit\u StatusChanges),
实体操作:(ev、条目、实体)=>
{
if(实体为审计单位)
{
//外形风扇的动作
//pf.xxxx=。。。;
}
else if(实体为审计对象)
{
//更改状态的操作
//ss.xxxx=。。。;
}
})
.Map(/*…*/)
.AuditEntityAction((evt、条目、auditEntity)=>
{
//共同行动。。。
})));
这将很快发布,是对更改的提交

更新 这包括在14.6.2版开始的
Audit.EntityFramework
库中