我试图在我认为从VS 2012升级的现有项目中在DbContext中模拟(使用Moq)DbSet。我收到错误并且它出现了错误因为那些DbSet<>并未标记为虚拟,因此无法对其进行模拟。当我查看我已经完成的新项目时,它们被标记为虚拟。
由于这是在.edmx文件中,因此我不能将虚拟添加到代码中,因为它是自动生成的。有没有人知道我可以设置哪些属性使它们成为虚拟?
答案 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
文件后,应自动执行。如果没有,请尝试右键单击它并选择“运行自定义工具”。