我刚刚从EF5升级到EF6,我在使用来自不同程序集的DbContext连接到数据库的自定义T4中遇到此错误。
文件:EF6.Utility.CS.ttinclude
编译转换:名称' ArgumentNotNull'在当前上下文中不存在
我所做的就是将EF.Utility.CS.ttinclude
替换为EF6.Utility.CS.ttinclude
,这解决了有关DbSet
和DbContext
未找到的其他错误。
T4很简单,就像这个:
using(var context = new EntityContext)
return context.Entities.Where(x => 1==1);
除了EF包括我只引用我自己的程序集。新添加的Context生成得很好(在另一个项目中)。
究竟什么是错的?
答案 0 :(得分:1)
EF6.Utility.CS.ttinclude 引用了main template.tt中定义的一些静态函数,因此您也需要将其包含在模板中。
示例: Entity.tt定义了 ArgumentNotNull (T arg,字符串名称),它在EF6.Utility.CS.ttinclude中使用(这不是我们习惯的方式)
请参阅EF6设计器生成的模板的底部,以查看缺少的功能
答案 1 :(得分:0)
解决此问题的一种方法是将几乎所有代码移动到.cs文件,然后在T4模板中使用该文件。然后从T4模板中删除EF ttinclude。
工作并且很容易遵循。