2017-07-25 49 views
1

我正在研究一个应用程序,其中有大约5个上下文,每个对应于数据库中的数据库模式(模式如Accounts,Sales,Purchases ..等),所有这些都连接到同一个数据库。 现在我建立在数据库中存储的审计功能,这是所有环境共享的功能,基本上,我重写SaveChanges方法,还有我保存ChangeTracker.Entries其中存在于CommonContextAudit表,现在我想在所有上下文中应用相同的代码,我想在这两个选项中:在EF覆盖SaveChanges的几个上下文中共享代码?

- 在每个上下文中都有一个表,并在所有上下文中复制/粘贴审计代码(可怕的选项)。

- 在所有上下文中调用并打开CommonContext,这对我来说似乎不是很好的做法(在另一个上下文中打开上下文,我将不得不引用CommonContext库)。

这些是我能想到的唯一选择,所以我在这里寻求帮助!

我使用EF 6数据库优先。

+0

我认为如果您将CommonContext设置为Base上下文并从其他上下文继承它。 –

回答

0

你要做的是创建一些常见的跨领域关注基础设施,因此重复和继承不是很好的选择。您应该在上下文中创建具有通用接口访问实体的存储库,而不是创建存储库的装饰器,以便在内部持有CommonContext的审计目的。您还必须确保CommonContext和其他人共享相同的连接并在相同的TransactionScope下运行。