C# - 更新 ef .edmx 文件后维护界面

标签 c# entity-framework

我正在开发一个 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/

相关文章:

c# - ASP.NET - 将 C# 变量传递给 HTML

asp.net - Entity Framework 6 EntityDataSource 未在 DbContext 中调用 SaveChanges

c# - 禁用延迟加载仍然加载相关实体。为什么?

c# - SelectListItem 投影的 EFCore SqlException 对值和文本使用相同的属性

c# - Entity Framework 中的异步等待支持?

c# - Noda Time WeekOfWeekYear 从星期日开始而不是星期一

c# - 通过 Asp.Net MVC 应用程序中托管的 SignalR 中心从外部服务向 Web 客户端发送通知

c# - 如何在 C# 中使用 HttpClient 发送文件和表单数据

c# - 从不使用继承的两个类(具有相同的属性名称)获取属性值的优雅解决方案是什么?

c# - Entity Framework : SqlGeography vs DbGeography