Entity Framework переопределяет SaveChanges () на слое сервиса вместо слоя данных (разные проекты) - PullRequest
0 голосов
/ 25 августа 2018

В моем приложении ASP.NET WebAPI есть уровень данных и сервиса, несколько проектов в одном решении.

Data Layer (Entity Framework)
-DbContext.cs

Service Layer (Business Logic)
-Controller.cs
-Global.asax

Одна из моих сущностей требует перехвата бизнес-логики при каждом запуске DbContext SaveChanges ().

public class MyDbContext : DbContext
{

    public override int SaveChanges()
    {
        BusinessLogicAndUpdateEntity(); //Code from Service Layer
        return base.SaveChanges();
    }
}

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

Есть ли способ переопределить DbContext SaveChanges () в слое сервиса, не перенося мою бизнес-логику на уровень данных?

1 Ответ

0 голосов
/ 25 августа 2018

Вы можете запустить событие в MyDbContext (может быть, оно уже существует в DbContext?)

public delegate void BeforeSaveChangesSignature ();
public class MyDbContext : DbContext
{
    public event BeforeSaveChangesSignature BeforeSaveChanges {get; set;}

    public override int SaveChanges()
    {
        BeforeSaveChanges?.Invoke(); 
        return base.SaveChanges();
    }
}

Ваша бизнес-логика затем подписалась бы на событие и выполнила все, что им нужно:

...
var context = new MyDbContext();
context.BeforeSaveChanges  += () => { Console.WriteLine("Before save"); }
...
...