在现有项目中,实体类型未标记为虚拟
本文关键字:类型 记为 虚拟 实体 项目 | 更新日期: 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
文件后,应自动执行。如果没有,请尝试右键单击它并选择"运行自定义工具"。