Net Framework 4.8 EF6 EDMX T4 错误_ GenerationEnvironment 为 NULL

Ser*_*exx 16 t4 entity-framework edmx edmx-designer .net-4.8

这始于 EDMX 突然不生成类文件。.context.cs 文件包含类声明,例如

  public virtual DbSet<myTable> myTable { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

在调试 Model.tt T4 模板时,此声明:

public StringBuilder GenerationEnvironment { get { return (StringBuilder)_generationEnvironment.GetValue(_instance, null); } }
Run Code Online (Sandbox Code Playgroud)

产生

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

_ GenerationEnvironment 变量为 NULL。

为了确保数据库更改不会触发此问题,我重新创建了模型,仅包含一个未修改的表,但没有任何改进。

不幸的是,我没有能力将其转移到代码优先和核心,因此我们将不胜感激地收到任何建议。

Chr*_*ski 31

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

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

_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.NonPublic);
Run Code Online (Sandbox Code Playgroud)

_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.Public);
Run Code Online (Sandbox Code Playgroud)

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

  • 看起来 vs2022 17.6.4 已经修复了这个问题。 (4认同)

J. *_*ten 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:第1928行

编辑:回滚到 17.5.3 后问题就消失了