使用使用EF连接到数据库的控制台应用程序,我可以调用Update-Database
并将其连接到数据库。但是,我在尝试将其迁移到Azure功能时遇到了问题。类似的问题被问到here,我怀疑解决方案可能是相同的,尽管可能没有太多细节。
在我的控制台应用程序中,提供了以下相关配置:
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<connectionStrings>
<add name="DBConnection" providerName="System.Data.SqlClient" connectionString="Server=.\SQLEXPRESS;Database=MyDB;User Id= . . ." />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
在我的local.settings.json中,我只有数据库连接字符串:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=...",
"AzureWebJobsDashboard": "DefaultEndpointsProtocol=https;AccountName=...",
},
"ConnectionStrings": {
"DBConnection": "Server=.\\SQLEXPRESS;Database=..."
}
}
链接问题的含义是需要提供提供者名称。我会假设还需要提供其他一些EF配置部分。实际上,当我将函数应用程序设置为启动时运行Update-Database
时,我收到此错误:
Exception calling "SetData" with "2" argument(s): "Type 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in assembly
这往往意味着启动项目没有正确的EF配置。
因此,我的问题是我在local.settings.json文件中需要的其他配置是什么?
答案 0 :(得分:0)
您可以将提供程序名称添加到local.settings.json文件中的连接字符串中,如下所示:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=...",
"AzureWebJobsDashboard": "DefaultEndpointsProtocol=https;AccountName=...",
},
"ConnectionStrings": {
"DBConnection": {
"ConnectionString": "Server=.\\SQLEXPRESS;Database=...",
"ProviderName": "System.Data.SqlClient"
}
}
}
请注意,我之所以命名为“ DBConnection”,是因为这是您在控制台应用程序中使用的名称,并且我假设您在从DbContext继承的Azure函数的上下文类中,您仍引用相同的名称。 / p>
我的第二个假设是,由于使用SQL Express,因此正在本地计算机上测试Azure函数。
请注意,如果从Azure运行Azure功能,则需要转到Function App的应用程序设置(图像1),并将连接字符串添加到Connection strings
集合(图像2)。您必须这样做,因为在local.settings.json
中声明的连接字符串将不会部署到Azure。
相关的Microsoft文档可以在这里找到:local settings file documentation。
图像1-Azure Function App应用程序设置
图片2-连接字符串集合
其他信息:当您在本地运行/调试Azure函数时,可以使用Azure存储模拟器,并避免将Azure函数绑定到Azure托管的存储帐户。您只需在local.settings.json
中替换由AzureWebJobsStorage
分配给AzureWebJobsDashboard
和UseDevelopmentStorage=true
的值。