我正在开发一个 MVC 项目,我正在努力更新代码库,以便我们可以开始使用 MS Test 来测试我们的代码库。我的方法是使用存储库模式与数据库进行交互,并使用依赖注入(inject)来帮助在我们的测试项目中开发模拟对象。
我们的 MVC 项目使用数据库优先的方法来更新 .edmx
文件。我们在添加\更新表和其他数据库对象时使用 VS 生成代码。
当对 .edmx
进行更新时文件,然后这会更新我项目的 DBContext
类(class)。我的DBContext
类实现了我创建的一个接口(interface),该接口(interface)存储所有表 (DBSet<TableName>)
我在我的项目中使用的。
每次我更新我的 .edmx
文件与新表,VS 删除对我的界面的引用。
我想知道如何阻止 VS 删除我的 DBContext
中的接口(interface)引用类(class)。每次我更新我的 .edmx
文件 VS 删除了我对接口(interface)文件的引用,当我运行我的 MS 测试项目时,我得到了错误,因为我的 DBContext
对象不再实现我创建的接口(interface)。
最佳答案
选项 1::
您可以更改您的 T4 模板。
找到您的 EDMX 文件。嵌套在该文件中的是一个名为 NameOfYourModel.Context.tt 的文件,在该文件中有一行与此类似的行:
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
该行代码是生成上下文的代码。所以在 DbContext 旁边添加“, Interface Name” 所以最终结果将是这样的:
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext, IMyInterface
保存文件。现在,每次重新生成代码时,您的 Context 都会在其声明中包含该接口(interface)。您可以对该文件中生成的上下文进行进一步修改。
选项 2:
另一种选择是在单独的文件中创建一个分部类,其声明与您的上下文相同。并将您的自定义代码放入该文件中。部分类文件在编译时合并为一个类。它们必须在同一个项目中并在同一个命名空间下。
有关 Partial Classes 的更多信息
关于C# - 更新 ef .edmx 文件后维护界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58819462/