从Azure函数V2连接到SQL Server时与Entity Framework 6有关的问题

问题描述 投票:0回答:1

我正在尝试使用现有的库,该库是使用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文件,因此我尝试设置连接...

entity-framework azure azure-functions
1个回答
0
投票

我只是解决了此问题,但针对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"
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.