在现有项目中,实体类型未标记为虚拟

本文关键字:类型 记为 虚拟 实体 项目 | 更新日期: 2023-09-27 18:08:59

我试图模拟(使用Moq) DbSet's在DbContext在一个现有的项目,我认为是从VS 2012升级。我得到一个错误,这是因为那些DbSet<>'s不被标记为虚拟的,所以他们不能被嘲笑。当我看到我完成的新项目时,它们被标记为虚拟的。

因为这是在。edmx文件中,我不能只是添加虚拟代码,因为它是自动生成的。有人知道我可以设置什么属性来使它们成为虚拟的吗?

在现有项目中,实体类型未标记为虚拟

在EF6中,默认将DBSet成员创建为virtual。这不能从配置中更改,但必须编辑T4模板(.tt文件)。很可能有人之前编辑过它,并删除了virtual关键字。

要找到T4模板,在解决方案资源管理器中展开.edmx文件创建的树。您将在其中找到一个.tt文件。

要使您的DBSet再次成为virtual,您需要找到一个方法string DbSet(EntitySet entitySet)(在默认的.tt中,它是第307行)。这个方法创建了一个属性声明,您可以在这里操作它的模式。默认情况下

"{0} virtual DbSet<{1}> {2} {{ get; set; }}"
使用

。找到此模式的版本并将其更改为您喜欢的版本(或者简单地使用我提供的默认版本)。

编辑:如果你找不到这个方法,试着搜索

DbSet<</blockquote>

EDIT:编辑并保存.tt文件后,应自动执行。如果没有,请尝试右键单击它并选择"运行自定义工具"。