EF6.Utility.CS.ttinclude: ArgumentNotNull 不存在

EF6.Utility.CS.ttinclude: ArgumentNotNull does not exist

我刚从 EF5 升级到 EF6,我在使用来自不同程序集的 DbContext 连接到数据库的自定义 T4 中遇到此错误。

File: EF6.Utility.CS.ttinclude

Compiling transformation: The name 'ArgumentNotNull' does not exist in the current context

我所做的是将 EF.Utility.CS.ttinclude 替换为 EF6.Utility.CS.ttinclude,这解决了另一个关于 DbSetDbContext 未找到的错误。

T4很简单,像这样:

using(var context = new EntityContext)
    return context.Entities.Where(x => 1==1);

除了 EF 包含,我只引用我自己的程序集。新添加的上下文生成得很好(在另一个项目中)。

到底有什么问题?

解决此问题的一种方法是将几乎所有代码移动到 .cs 文件,然后在 T4 模板中使用该文件。然后从 T4 模板中删除 EF ttinclude。

有效且易于遵循。

EF6.Utility.CS.ttinclude 引用一些定义在 main template.tt 中的静态函数,因此您也需要将它们包含在模板中。

示例: Entity.tt 定义 A​​rgumentNotNull(T arg, string name) 用于 EF6.Utility.CS.ttinclude (这不是我们习惯的方式)

请参阅 EF6 设计器生成的模板底部以查看此缺失函数