OnSave
方法是一个单例(与您的所有实例中使用的方法相同)
DbContext
解决这个问题的一个方法是移动你的
Action
到新类:
public class MySaveEventHandler {
public System.Action<IEnumerable<EntityEntry>> OnSave;
}
然后在Startup.cs中将其作为单例添加,以使其可用于依赖项注入:
services.AddSingleton<MySaveEventHandler>();
数据库上下文
构造器通过DI接受它,并在您的应用程序中使用它
SaveChanges
方法:
MySaveEventHandler _mySaveEventHandler;
public MyDbContext(DbContextOptions<MyDbContext> options, MySaveEventHandler mySaveEventHandler) : base(options) {
_mySaveEventHandler = mySaveEventHandler;
}
public override int SaveChanges() {
if(_mySaveEventHandler.OnSave != null)
_mySaveEventHandler.OnSave(ChangeTracker.Entries());
return base.SaveChanges();
}
设置
保存
方法,你只需得到你的单曲
MySaveEventHandler
通过DI实例并设置它。那么你的每一个例子
数据库上下文
我会用的。
旁注:您可以使用事件而不是委托。我真的不认为它会对功能产生多大的影响,但这里有一些有趣的阅读:
https://docs.microsoft.com/en-us/dotnet/csharp/distinguish-delegates-events