Аудит на уровне данных вместо одного уровня приложения - PullRequest
0 голосов
/ 21 февраля 2019

Это мой первый вид задач, и я использую этот учебник. Ссылка

Различия заключаются в том, что это руководство сделано в одном слое, поэтому к нему легко получить доступ к свойствам Identity.

В моем проекте

  1. Уровень данных, на котором расположен контекст БД (и все наборы данных моделей)
  2. Объекты (модели), имеющие ссылку на уровни данных, обслуживания и представления
  3. Службы, имеющие ссылку на уровень представления
  4. Уровень представления

Проблема заключается в том, что я поместил модель аудита в слой сущностей, но в руководстве она имеет внешний ключ к таблице AspNetUsers, и миграция с первым кодом не прошла.

he ForeignKeyAttribute on property 'AuditUserId' on type 'Namespace.Entities.AuditActions.Audit' is not valid. The navigation property 'AuditUser' was not found on the dependent type 'Namespace.Entities.AuditActions.Audit'. The Name value should be a valid navigation property name

Вторая проблема заключается в том, что я не могу получить доступ к информации о пользователе из уровня данных, куда я поместил переопределения сохранения.

var currentUser = OwinContextHelper.CurrentApplicationUser;

Я не могу получить доступ к классу OwinHelpper, который помещен в слой представления изУровень данных, на котором размещаются переопределения.

Как мне реализовать этот учебник в моем приложении?

Любая идея будет приветствоваться.

Будьте еая - младший разработчик:)

1 Ответ

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

Попытка помочь с вашей второй проблемой:

Я бы порекомендовал библиотеки Audit.NET / Audit.EF для этого вида использования (на самом деле ядумаю, вы уже используете его).

Вы можете избежать передачи информации с уровня представления на уровень данных с помощью Custom Action .Библиотека дает вам возможность подключиться к созданию аудита, и вы можете поместить этот код на уровень представления, например:

class Presentation
{
    void StartUp()
    {
        // Use SqlServerDataProvider to store the audit events on SQL
        Audit.Core.Configuration.Setup()
            .UseSqlServer(_ => _
                .ConnectionString("...")
                .TableName("Event")
                .IdColumnName("EventId")
                .JsonColumnName("Data"));

        // Add a custom action to have a custom field 
        Audit.Core.Configuration.AddOnCreatedAction(scope =>
        {
            scope.SetCustomField("OwinUser", OwinContextHelper.CurrentApplicationUser);
        });
    }
}
...