如何在 T4 中实例化 EF6 上下文?

4
我想在T4模板中实例化一个新的EF6上下文,但是我遇到了以下错误:
System.InvalidOperationException:'System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的Entity Framework提供程序类型的'Instance'成员未返回从'System.Data.Entity.Core.Common.DbProviderServices'继承的对象。 Entity Framework提供程序必须继承此类,并且'Instance'成员必须返回提供程序的单例实例。
1个回答

1
问题在于无法实例化Entity Framework上下文,因为无法读取连接字符串。
我执行了以下操作以获取连接字符串:
var map = new ExeConfigurationFileMap();
map.ExeConfigFilename = this.Host.ResolvePath(@"..\..\Web.config");

var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
var connectionString = config.ConnectionStrings.ConnectionStrings["BrainPerformEntities"].ConnectionString;

但是请确保您已经导入以下内容,以使上述代码正常工作:

<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#@ import namespace="System.Configuration" #>
<#@ import namespace="System" #>

同时确保您已引用所有实体框架程序集:

<#@ assembly name="$(MSBuildProjectDirectory)\bin\EntityFramework.dll" #>
<#@ assembly name="$(MSBuildProjectDirectory)\bin\EntityFramework.SqlServer.dll" #>

<#@ assembly name="System.Core.dll" #>
<#@ assembly name="System.Configuration" #>
<#@ assembly name="System.Data.dll" #>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接