我想使用 EntityFramework 生成一些带有 T4 模板的代码。我在与当前工作的 EF6 DbContext 相同的程序集中创建了一个 T4 模板:
<#@ template language="C#" hostspecific="true" debug="True" #>
<#@ assembly name="$(SolutionDir)\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll" #>
<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="Conwell.Administration.Data.Entities" #>
<#
using (var db = new KassenautomatEntities())
{
#>
//Hello World
<#
}
#>
当我运行它时,出现以下异常:
运行转换:System.InvalidOperationException:
实体框架提供程序类型的“实例”成员
'System.Data.Entity.SqlServer.SqlProviderServices,
EntityFramework.SqlServer,版本=6.0.0.0,文化=中性,
PublicKeyToken=b77a5c561934e089' 没有返回一个对象
继承自“System.Data.Entity.Core.Common.DbProviderServices”。
实体框架提供者必须从此类继承
“实例”成员必须返回提供者的单例实例。
这可能是因为提供商不支持 Entity Framework 6
或更晚;看http://go.microsoft.com/fwlink/?LinkId=260882 http://go.microsoft.com/fwlink/?LinkId=260882了解更多
信息。
相同的上下文在 T4 之外也能正常工作。我缺少什么?
我遇到了同样的错误,让它工作的方法是:
- 确保引用 EntityFramework 和您的提供程序 DLL
您的 T4 模板;这足以消除这个错误。
<#@ assembly name="$(TargetDir)\EntityFramework.dll" #>
<#@ assembly name="$(TargetDir)\EntityFramework.SqlServer.dll" #>
- 由于 T4 在不同的上下文中运行,因此不会读取配置文件;因此,您需要创建一个接受连接字符串的 DbContext 构造函数;然后你在 T4 中创建上下文时传递它
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)