首页 文章

如何在T4模板中使用DbContext?

提问于
浏览
2

我想使用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
<#
    }
#>

当我运行它时,我得到以下execption:

运行转换:System.InvalidOperationException:实体框架提供程序类型'System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的'Instance'成员没有返回一个继承自'System.Data.Entity.Core.Common.DbProviderServices'的对象 . 实体框架提供程序必须从此类继承,并且“实例”成员必须返回提供程序的单例实例 . 这可能是因为提供者不支持实体框架6或更高版本;有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882 .

相同的上下文在T4之外工作正常 . 我错过了什么?

1 回答

  • 1

    我遇到了同样的错误,让它运行的方式是:

    • 确保在您的T4模板上引用EntityFramework和提供程序DLL;这足以摆脱这个错误 .

    <#@ assembly name =“$(TargetDir)\ EntityFramework.dll”#>
    <#@ assembly name =“$(TargetDir)\ EntityFramework.SqlServer.dll”#>

    • 配置文件不需要创建一个接受连接字符串的DbContext构造函数;然后你在T4中创建上下文时传递它

相关问题