首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Audit.Net保存实体关系?

如何用Audit.Net保存实体关系?
EN

Stack Overflow用户
提问于 2019-02-16 15:29:57
回答 2查看 668关注 0票数 2

我正在使用Audit.Net (Audit.EntityFramework),我想知道如何保存实体的关系?

这是我的配置

代码语言:javascript
复制
Audit.Core.Configuration.Setup()
                .UseEntityFramework(x => x
                    .AuditTypeMapper(typeName => typeof(AuditLog))
                    .AuditEntityAction<AuditLog>((ev, ent, auditEntity) =>
                    {
                        auditEntity.Table = ent.Table;
                        auditEntity.AuditDate = DateTime.UtcNow;
                        auditEntity.Action = ent.Action;
                        auditEntity._Changes = ent.Changes;
                        auditEntity._Entries = ev.GetEntityFrameworkEvent().Entries;
                        auditEntity.Success = ev.GetEntityFrameworkEvent().Success;
                        auditEntity._ColumnValues = ent.ColumnValues;
                        auditEntity._PrimaryKey = ent.PrimaryKey;
                    }));

考虑以下关系

代码语言:javascript
复制
public class Blog
{
    public int Id { set; get; }
    public string Title { set; get; }
    public string AuthorName { set; get; }

    public IList<Post> Posts { set; get; }
}

public class Post
{
    public int Id { set; get; }
    public string Title { set; get; }
    public string Content { set; get; }

    public virtual Blog Blog { set; get; }
}

我想知道删除Post对象时Blog的数据是什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-16 16:16:44

Entity Framework Data Provider为您提供了创建审计表的选项。因此您必须根据您计划创建一个Audit表,并保存所需的相关数据和额外数据。

票数 2
EN

Stack Overflow用户

发布于 2019-02-17 13:02:35

如果要删除的Post实例上包含Blog,则应该获得有关审计事件的信息。

例如,如果您像这样删除:

代码语言:javascript
复制
var post = dbContext.Posts
    .Include(p => p.Blog)
    .First(p => p.Id == 1);
dbContext.Posts.Remove(post);
dbContext.SaveChanges();

并且在Audit.EF配置中包含entity对象:

代码语言:javascript
复制
Audit.EntityFramework.Configuration.Setup()
    .ForAnyContext(_ => _
        .IncludeEntityObjects()
    );

您应该能够在AuditEntityAction / CustomAction上获得博客信息

代码语言:javascript
复制
Audit.Core.Configuration.Setup()
    .UseEntityFramework(x => x
        .AuditTypeMapper(typeName => typeof(AuditLog))
        .AuditEntityAction<AuditLog>((ev, ent, auditEntity) =>
        {
            if (ent.Entity is Post post)
            {
                var blog = post.Blog;
            }
            // OR, if you don't IncludeEntityObjects:
            if (ent.GetEntry().Entity is Post post)
            {

            }
            //...
        }));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54720863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档