这始于 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。
为了确保数据库更改不会触发此问题,我重新创建了模型,其中仅包含一个未修改的表,但没有任何改进。
不幸的是,我没有能力将其转移到代码优先和核心,因此我们将不胜感激地收到任何建议。
在最新更新(即 17.6.2)中,
Microsoft.VisualStudio.TextTemplating.GeneratedTextTransformation.GenerationEnvironment
属性访问似乎已从非公开更改为公开
您可以修改
EF.Utility.CS.ttinclude
中的 EF6.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);
到
_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.Public);
编辑: 看来VS下个版本会修复 https://github.com/dotnet/ef6tools/commit/89cd126fa8ebfd40c3b5e781232be940711cf726
这里也有同样的问题。使用 Visual Studio Community 2022 版本 17.6.2
C:\ Program Files \ Microsoft Visual Studio�2 \ Community \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ Templates \ Includes \ EF6.Utility.CS.ttinclude:第1928行
编辑:回滚到 17.5.3 后问题消失了
我确实以一种迂回的方式找到了与答案中相同的内容 - 修复并重新安装 VS 2022(抱歉,可以提到版本)后没有任何效果,并且无法找到回滚的方法社区版本,我重新安装了VS2019,在那里创建了.EDMX模型,没有问题。
我现在在 VS2022 中继续。希望它在下一个版本中得到修复。