我正在使用一个开源审计框架Audit.NET,它为实体框架提供了一个扩展,这里是:AuditDbContext.csDbContext
我想在我的项目中使用此实体框架扩展来实现audit.net,因为它可以自动执行许多其他需要手动执行的步骤(我可以手动使用audit.net,而不使用实体框架扩展)。我遇到的问题是我的解决方案存储库实现了// Implements DbContextpublic abstract partial class AuditDbContext : DbContext
,当然这也是IdentityDbContext
的实现。DbContext
没有实现// Implements IdentityDbContextpublic class MyDataContext : IdentityDbContext<ApplicationUser>{ public MyDataContext() : base("DefaultConnection") { }...
的现有AuditDbContext
。
我似乎想不出一种干净的方法来将这两种方法混合在一起并使我的存储库使用IdentityDbContext
,特别是考虑到AuditDbContext
有受保护的构造函数,而且AuditDbContext
和DbContext
都有IdentityDbContext
方法。我试图创建一个名为protected
的组合,其中包含每个上下文的AuditIdentityDbContext
副本,但这样做无法实现它们的所有接口。
上面的3个private
类型似乎都需要从继承,因为DbContext
成员。在我的职业生涯中,我第一次觉得多重继承在这种情况下可能会有帮助,但是考虑到这不可能,什么是最好的选择?
我唯一能想到的是创建一个继承自protected
或AuditDbContext
的新类,并手动实现剩下的任何内容以匹配另一个类的功能。但是没有接口类要实现,所以我很确定这不会起作用。我觉得我一定忽略了什么。
最佳答案
@trailmax解决方案应该可以工作,但是我已经更新了Audit.NET库,包括对IdentityDbContext
的支持。
提供了一个新的类AuditIdentityDbContext,因此您可以更改上下文以从该类继承。
您应该将代码更改为:
public class MyDataContext : AuditIdentityDbContext<ApplicationUser>
{
...
}
注:我是图书馆老板
GitHub Issue