Net Framework 4.8 EF6 EDMX T4 错误 _generationEnvironment 为 NULL [duplicate]

Net Framework 4.8 EF6 EDMX T4 Error _generationEnvironment is NULL [duplicate]

提问人:Serexx 提问时间:5/29/2023 更新时间:11/14/2023 访问量:2401

问:

这始于 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变量为 NULL。

为了确保数据库更改不会触发这种情况,我重新创建了模型,仅包含一个未修改但未改进的表。

不幸的是,我没有奢侈地将其移动到 Code-First 和 Core,因此任何建议都将不胜感激。

实体框架 T4 .NET-4.8 EDMX 设计器

评论

1赞 ErikEJ 5/29/2023
究竟是哪个 VS 版本?
0赞 Serexx 5/30/2023
谢谢,是的,看起来像是与我同时发布的重复项。我已经通过启动 VS 2019 来执行 .EDMX 创建,但我已经注意到了现在的解决方法。

答:

1赞 J. van Holten 5/29/2023 #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。实用程序.CS.ttinclude:line 1928

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

1赞 Serexx 5/30/2023 #2

我确实以迂回的方式找到了与答案相同的东西 - 在修复然后重新安装 VS 2022(对不起,可以提到该版本)没有任何效果并且无法找到回滚社区版本的方法后,我重新安装了 VS2019,创建了 .EDMX模型在那里,没有问题。

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

31赞 Chris Bednarski 5/30/2023 #3

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

您可以修改 和 文件,通过更改EF.Utility.CS.ttincludeEF6.Utility.CS.ttincludeC:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes

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

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

编辑: 看起来它将在下一个 VS 版本中修复 https://github.com/dotnet/ef6tools/commit/89cd126fa8ebfd40c3b5e781232be940711cf726

评论

0赞 donstack 6/3/2023
快速修复。这奏效了!
4赞 lastr2d2 6/21/2023
看起来 vs2022 17.6.4 已修复此问题。