我想在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'的对象。实体框架提供者必须从此类继承并且实例'成员必须返回提供者的单例实例。
答案 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" #>