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

时间:2016-09-27 14:36:54

标签: c# entity-framework moq

我试图在我认为从VS 2012升级的现有项目中在DbContext中模拟(使用Moq)DbSet。我收到错误并且它出现了错误因为那些DbSet<>并未标记为虚拟,因此无法对其进行模拟。当我查看我已经完成的新项目时,它们被标记为虚拟。

由于这是在.edmx文件中,因此我不能将虚拟添加到代码中,因为它是自动生成的。有没有人知道我可以设置哪些属性使它们成为虚拟?

1 个答案:

答案 0 :(得分:4)

在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&LT;

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