我想使用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'。
实体框架提供者必须继承此类,并且
“实例”成员必须返回提供者的单例实例。
这可能是因为提供程序不支持实体框架6
或以后;有关更多信息,请参见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中创建上下文时将其传递
关于c# - 如何在T4模板中使用DbContext?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38103322/