带有数据库的 Azure 函数连接字符串 使用实体框架的第一种方法

Posted

技术标签:

【中文标题】带有数据库的 Azure 函数连接字符串 使用实体框架的第一种方法【英文标题】:Azure Function Connection String with database First approch with Entity Framework 【发布时间】:2017-10-23 08:52:17 【问题描述】:

我有一个使用数据库优先方法连接字符串的 Azure 函数。连接字符串位于包含敏感数据的local.settings.json 文件中。


  "IsEncrypted": false,
  "Values": 
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "AzureWebJobsDashboard": "UseDevelopmentStorage=true"
  ,
  "ConnectionStrings": 
    "MyConnectionString": "data source=localhost\\sqlexpress;initial catalog=SampleQrCodes;user id=sa;password=****;MultipleActiveResultSets=True;App=EntityFramework"
  
 

如果我尝试删除 providerName,它会给我以下异常:

上下文在 Code First 模式下使用,代码是从 EDMX 文件生成的,用于 Database First 或 Model First 开发。这将无法正常工作.....您将其传递给采用 DbConnection 的基本 DbContext 构造函数之一

实际连接字符串(从 EF 生成):

<add name="DataContext" connectionString="metadata=res://*/EFModel.csdl|res://*/EFModel.ssdl|res://*/EFModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost\sqlexpress;initial catalog=SampleQrCodes;user id=sa;password=***;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

这里有类似的问题Load Connection String from Config File in Azure Functions,但它不适合我如何通过数据库优先方法在local.settings.json 中定义此连接字符串?

【问题讨论】:

【参考方案1】:

根据你的描述,这里是类似的 git hub issue。根据我的测试,您可以在 local.settings.json 文件中配置连接字符串,如下所示:


  "IsEncrypted": false,
  "Values": 
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>",
    "AzureWebJobsDashboard": "DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>"
  ,
  "ConnectionStrings": 
    "DataContext": 
      "ConnectionString": "metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=<server-name>.database.windows.net;initial catalog=<database-name>;persist security info=True;user id=<username>;password=<password>;MultipleActiveResultSets=True;App=EntityFramework'",
      "ProviderName": "System.Data.EntityClient"
    
  
 

为了部署到您的 azure 函数,您可能需要修改 DbContext。更多详情,可以参考这个类似的issue。

【讨论】:

以上是关于带有数据库的 Azure 函数连接字符串 使用实体框架的第一种方法的主要内容,如果未能解决你的问题,请参考以下文章

带有特殊字符的 Azure 连接字符串

Azure 函数 - 到本地数据库的连接字符串

Azure 函数队列触发器。连接字符串中可能的错误绑定配置?

将连接字符串设置为Azure函数中的应用设置/环境变量

Azure SQL 槽 VNet 的 Azure 函数连接字符串

Azure 函数 - 如何在 app.config 中添加我的数据库连接字符串