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

时间:2015-01-20 13:32:43

标签: c# sql-server entity-framework t4

我想在T4模板中实例化一个新的EF6上下文,但是我收到以下错误:

  

System.InvalidOperationException:' Instance'实体框架提供程序类型的成员' System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'没有返回继承自System.Data.Entity.Core.Common.DbProviderServices'的对象。实体框架提供者必须从此类继承并且实例'成员必须返回提供者的单例实例。

1 个答案:

答案 0 :(得分:1)

问题在于无法实例化实体框架上下文,因为无法读取连接字符串。

我做了以下操作来获取连接字符串:

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" #>