我想在T4模板中实例化一个新的EF6上下文,但是我收到以下错误:
system.invalidOperationException: The ‘Instance’ member of the Entity Framework provider type ‘System.Data.Entity.sqlServer.sqlProviderServices,EntityFramework.sqlServer,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089’ did not return an object that inherits from ‘System.Data.Entity.Core.Common.DbProviderServices’. Entity Framework providers must inherit from this class and the ‘Instance’ member must return the singleton instance of the provider.
解决方法
问题是无法实例化实体框架上下文,因为无法读取连接字符串.
我做了以下以获取连接字符串:
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" #>