Azure (v1) 函数中的 EF 配置



ProjectA 包含 EF 代码,通常托管在 MVC 项目中。现在我想将其"包装"在 Azure (v1) 函数中(让我们调用 ProjF),以便在消耗计划中公开(以便我们可以缩放繁重的调用)。

所以我参考ProjA,很好。但是如何完成所有EF设置呢?连接字符串通过 host.settings.json 通过 fina 发送,但其余的来自 web.config ? (请注意,我们使用PostgresSql和Devart)。由于 azure 函数没有 app.config 或 web.config,因此必须在其他位置设置这些设置。

web.config 中的相关部分:

<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="Devart.Data.PostgreSql" type="Devart.Data.PostgreSql.Entity.PgSqlEntityProviderServices, Devart.Data.PostgreSql.Entity.EF6, Version=7.12.1328.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Devart.Data.PostgreSql" />
<add name="dotConnect for PostgreSQL" invariant="Devart.Data.PostgreSql" description="Devart dotConnect for PostgreSQL" type="Devart.Data.PostgreSql.PgSqlProviderFactory, Devart.Data.PostgreSql, Version=7.12.1328.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
</DbProviderFactories>
</system.data>

已经查看了解决方案 如何在 Azure 函数中指定实体框架提供程序名称 但无法弄清楚要使用什么值,因为我们使用的是 Postgres + Devart

当 app.config 不可用时,可以通过代码添加注册 DbProviderFactory 和 EF6 提供程序。这里有一个例子:https://forums.devart.com/viewtopic.php?t=28550#p97525。