Net Framework 4.8 EF6 EDMX T4 错误 _generationEnvironment 为空。

16

这始于一个EDMX突然不生成类文件的问题。.context.cs文件包含了类声明,例如:

  public virtual DbSet<myTable> myTable { get; set; }

但实际的类文件没有生成。两个.tt文件都在那里,“运行自定义工具”也没有帮助。

在调试Model.tt T4模板时,出现了这个声明:

public StringBuilder GenerationEnvironment { get { return (StringBuilder)_generationEnvironment.GetValue(_instance, null); } }

生成

"System.NullReferenceException: '对象引用未设置为对象的实例。'"

_generationEnvironment变量为空。

为了确保数据库更改不会触发此问题,我重新创建了模型,只包括一个未被修改的表,但没有改善。

不幸的是,我没有将其迁移到Code-First和Core的奢侈条件,所以非常感谢任何建议。


1
哪个版本的VS? - ErikEJ
谢谢,是的,看起来像是一个与我同时发布的重复问题。我通过启动VS 2019来进行.EDMX创建已经解决了我的问题,但我现在已经记录下了这个解决方法以备将来之需。 - Serexx
3个回答

31

最新更新(即17.6.2)中,Microsoft.VisualStudio.TextTemplating.GeneratedTextTransformation.GenerationEnvironment 属性访问似乎已从非公共更改为公共。

您可以修改 C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes 中的 EF.Utility.CS.ttincludeEF6.Utility.CS.ttinclude 文件来解决此问题,方法是更改:

_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.NonPublic);

_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.Public);

编辑: 看起来这个问题将在下一个VS版本中得到解决 https://github.com/dotnet/ef6tools/commit/89cd126fa8ebfd40c3b5e781232be940711cf726


快速修复。这个有效! - donstack
4
看起来 VS2022 17.6.4 已经修复了这个问题。 - lastr2d2
4
看起来 VS2022 17.6.4 已经修复了这个问题。 - undefined

1

我也遇到了同样的问题。使用的是Visual Studio Community 2022版本17.6.2。

C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility.CS.ttinclude:line 1928

编辑:回滚到17.5.3后问题已解决。


1

我找到了与答案中相同的东西(谢谢),但是是通过绕路方式找到的 - 在修复并重新安装VS 2022(抱歉,可能没有提到版本)无效且找不到回滚社区版的方法后,我重新安装了VS2019,在那里创建了.EDMX模型,没有问题。

现在我正在继续使用VS2022。希望它能在下一个版本中得到修复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接