Как сохранить отношения сущностей с Audit.Net? - PullRequest
0 голосов
/ 16 февраля 2019

Я использую Audit.Net (Audit.EntityFramework), и я хочу знать, как я могу сохранить отношение сущности?

Вот моя конфигурация

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

Рассмотрим следующие отношения

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; }
}

Я хочу знать, что представляют собой данные Blog при удалении объекта Post.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Если Blog включено в удаляемый экземпляр Post, вы должны получить эту информацию о событии аудита.

Например, если вы удаляете так:

var post = dbContext.Posts
    .Include(p => p.Blog)
    .First(p => p.Id == 1);
dbContext.Posts.Remove(post);
dbContext.SaveChanges();

И вы включаете объекты сущностей в конфигурацию Audit.EF:

Audit.EntityFramework.Configuration.Setup()
    .ForAnyContext(_ => _
        .IncludeEntityObjects()
    );

Вы должны иметь возможностьчтобы получить информацию блога на AuditEntityAction / CustomAction:

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)
            {

            }
            //...
        }));
0 голосов
/ 16 февраля 2019

Поставщик данных Entity Framework дает вам возможность создавать таблицы аудита.Таким образом, вы должны создать Audit таблицу на основе вашего плана и сохранить связанные и дополнительные данные, которые вам нужны.

enter image description here

...