实体类型在现有项目中未标记为虚拟
Entity Types aren't marked virtual in existing project
我正在尝试在我认为是从 VS 2012 升级的现有项目的 DbContext 中模拟(使用 Moq)DbSet。我收到一个错误,这是因为那些 DbSet<> 不是标记为虚拟的,所以他们不能被嘲笑。当我查看我完成的较新项目时,它们被标记为虚拟。
由于这是在 .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<
编辑:编辑并保存.tt
文件后,应该会自动执行。如果没有,请尝试右键单击它并选择 'Run Custom Tool'.
我正在尝试在我认为是从 VS 2012 升级的现有项目的 DbContext 中模拟(使用 Moq)DbSet。我收到一个错误,这是因为那些 DbSet<> 不是标记为虚拟的,所以他们不能被嘲笑。当我查看我完成的较新项目时,它们被标记为虚拟。
由于这是在 .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<
编辑:编辑并保存.tt
文件后,应该会自动执行。如果没有,请尝试右键单击它并选择 'Run Custom Tool'.