我正在尝试使用现有的库,该库是使用EF 6.0连接到数据库的.net库。由于Azure Functions没有app.config
文件,因此我尝试使用C#代码设置连接字符串。但是在使用数据库上下文连接到数据库时,出现以下异常:
System.ArgumentException:具有不变名称'System.Data.SqlClient'的ADO.NET提供程序未在计算机或应用程序配置文件中注册,或者无法加载。有关详细信息,请参见内部异常。
System.ArgumentException:在已注册的.NET数据提供程序列表中找不到指定的不变名称'System.Data.SqlClient']
MyDBContext.partial.cs:
[DbConfigurationType(typeof(MyDbConfiguration))] public partial class MyDBContext : DbContext { public MyDBContext (string ConnectionString) : base(ConnectionString) { } } public class MyDbConfiguration : DbConfiguration { public MyDbConfiguration() { SetProviderServices("System.Data.SqlClient", SqlProviderServices.Instance); SetDefaultConnectionFactory(new SqlConnectionFactory()); } }
我有以下获取
DBContext
的方法。库方法将使用此方法来获取数据库上下文实例。
public MyDBContext GetDB( string metadata, string connectionString ) { EntityConnectionStringBuilder b = new EntityConnectionStringBuilder(); b.Metadata = metadata; b.ProviderConnectionString = connectionString; b.Provider = "System.Data.SqlClient"; return new MyDBContext (b.ConnectionString); }
[当我执行库方法以从Azure函数v2从db加载数据时,该函数内部调用上述方法以获取数据库上下文,然后连接到实际的数据库。这里创建了MyDBContext对象,但是当它连接到db时,会发生以下异常。
System.ArgumentException:具有不变名称'System.Data.SqlClient'的ADO.NET提供程序未在计算机或应用程序配置文件中注册,或者无法加载。有关详细信息,请参见内部异常。
System.ArgumentException:在已注册的.NET数据提供程序列表中找不到指定的不变名称'System.Data.SqlClient']
我正在尝试使用现有的库,该库是使用EF 6.0连接到数据库的.net库。由于Azure Functions没有app.config文件,因此我尝试设置连接...
我只是解决了此问题,但针对Azure函数V1。当将EF与Azure函数一起使用时,您可以在'local.settings.json'文件中指定连接字符串,如下所示:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": ""
},
"ConnectionStrings": {
"YourEntities": {
"ConnectionString": "metadata=res://*/EF.yourModel.csdl|res://*/EF.yourModel.ssdl|res://*/EF.yourModel.msl;provider=System.Data.SqlClient;provider connection string='data source=yourServer;initial catalog=yourDB;persist security info=True;user id=yourUserID;password=yourPwd;MultipleActiveResultSets=True;App=EntityFramework'",
"ProviderName": "System.Data.EntityClient"
}
}
}