在EF覆盖SaveChanges的几个上下文中共享代码?

时间:2017-07-25 08:07:08

标签: c# entity-framework oop architecture dbcontext

我正在开发一个应用程序,其中有大约5个上下文,每个上下文对应于数据库中的数据库模式(如Accounts,Sales,Purchases等模式),它们都连接到同一个数据库。 现在我正在构建一个在数据库中存储审计的功能,这是所有上下文的共享功能,基本上,我覆盖SaveChanges方法,并在ChangeTracker.Entries中保存AuditCommonContext中存在的表,现在我想在所有上下文中应用相同的代码,我在考虑这两个选项:

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

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

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

我正在使用EF 6数据库。

1 个答案:

答案 0 :(得分:0)

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