C#-更新ef.edmx文件后维护接口

C#-更新ef.edmx文件后维护接口,c#,entity-framework,C#,Entity Framework,我正在从事一个MVC项目,我正在努力更新代码库,以便我们可以开始使用MS Test来测试我们的代码库。我的方法是使用存储库模式与数据库交互,并在测试项目中使用依赖项注入来帮助开发模拟对象 我们的MVC项目使用数据库优先的方法来更新.edmx文件。在添加\更新表和其他db对象时,我们使用VS生成代码。 对.edmx文件进行更新时,将更新项目的DBContext类。我的DBContext类实现了我创建的一个接口,该接口存储了我在项目中使用的所有表(DBSet) 每次我用新表更新我的.edmx文件时,

我正在从事一个MVC项目,我正在努力更新代码库,以便我们可以开始使用MS Test来测试我们的代码库。我的方法是使用存储库模式与数据库交互,并在测试项目中使用依赖项注入来帮助开发模拟对象

我们的MVC项目使用数据库优先的方法来更新
.edmx
文件。在添加\更新表和其他db对象时,我们使用VS生成代码。 对
.edmx
文件进行更新时,将更新项目的
DBContext
类。我的
DBContext
类实现了我创建的一个接口,该接口存储了我在项目中使用的所有表
(DBSet)

每次我用新表更新我的
.edmx
文件时,VS都会删除对我的界面的引用


我想知道如何阻止VS删除我的
DBContext
类中的接口引用。每次我更新我的
.edmx
文件VS时,都会删除对接口文件的引用,当我运行MS测试项目时,我会收到错误,因为我的
DBContext
对象不再实现我创建的接口。

选项1:

您可以更改T4模板

找到您的EDMX文件。在该文件中嵌套有一个名为yourmodel.Context.tt的文件,该文件中有一行类似于此:

部分类:DbContext

这行代码就是生成上下文的代码。因此,在DbContext的旁边添加“Interface Name”,最终结果如下:

部分类:DbContext,IMyInterface

保存文件。现在,每次重新生成代码时,上下文的声明中将包含该接口。您可以在此文件中对生成的上下文进行进一步修改

选项2:

另一个选项是在一个单独的文件中创建一个分部类,并使用与上下文相同的声明。并将自定义代码放入该文件中。部分类文件在编译时合并到单个类中。它们必须位于同一项目中,并且位于同一命名空间下


有关

的详细信息,请不要将代码放入DBContext类中。为接口创建一个新类。请看我的答案。如果它解决了您的问题,请不要忘记标记为已回答。我在过去做过很多次这样的改变。不要在DbContext中放入任何额外的逻辑。额外的逻辑/方法应使用单独的服务类实现,该服务类中注入了DbContext。@phuzi要添加代码,还可以使用分部类。我用如何使用分部类的信息更新了我的答案。这将如何实际实现接口?您说过“VS删除我对接口文件的引用”。。。。因此,这将使它不会从dbcontext中删除接口引用。此外。。。如果您想要在同一个文件中,您可以对生成上下文的方式进行更多修改。Cheers@phuzi我还添加了另一个选项。如果需要,还可以使用分部类生成另一个文件,并且该文件不会被覆盖。