API 项目 -> C# -> .Net 4.8 -> EF6 -> 移至 Azure SQL DB,有时会遇到此问题:
出现了异常,可能是由于暂时性故障所致。如果您要连接到 SQL Azure 数据库,请考虑使用 SqlAzureExecutionStrategy
我使用此处接受的答案来帮助我回答我的问题: 使用 DbMigrationsConfiguration 将ExecutionStrategy 设置为 SqlAzureExecutionStrategy?
而且它似乎有效。
我创建了一个新课程:
public class DataContextConfiguration : DbConfiguration
{
public DataContextConfiguration()
{
SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
}
}
并将其添加为对我的 context.cs 文件的引用:
[DbConfigurationType(typeof(DataContextConfiguration))]
public partial class APIEntities : DbContext
{
一切似乎都在工作,但它在 APIEntities 文件的顶部指出:
<auto-generated>
This code was generated from a template.
Manual changes to this file may cause unexpected behavior in your application.
Manual changes to this file will be overwritten if the code is regenerated.
</auto-generated>
这意味着当对 edmx 文件进行更改时,它将重新生成。
所以看这篇文章: https://learn.microsoft.com/en-us/ef/ef6/fundamentals/configuring/code-based
我想更改此
DataContextConfiguration
以从连接字符串中的entityFrameworkcode ConfigurationType加载,但我对命名有点困惑。
它说:
codeConfigurationType 的值必须是 DbConfiguration 类的程序集和命名空间限定名称。
所以如果我的项目是:
项目名称1 -> DataContextConfiguration(文件名)
以及“MyAssembly”(如果通过右键单击项目并查看程序集名称获得): (与ProjectName1相同)
这是否意味着我会将
codeConfigurationType
标签设置为:
<entityFramework codeConfigurationType="ProjectName1.DataContextConfiguration, ProjectName1">
请问这是正确的吗?
当您迁移到 SQL Azure 数据库时,建议使用
SqlAzureExecutionStrategy
来处理暂时性故障。您所做的配置更改是朝着正确方向迈出的一步。为了解决您对自动生成的 DbContext
文件的担忧,如果从 EDMX 文件重新生成代码,对此文件的任何手动更改都将丢失,这是正确的。但是,由于 EF 类定义为 partial
,因此您可以使用自定义 DbContext
类修改安全地创建单独的文件。
现在,要在配置文件中指定您的
DbConfiguration
类,您的方法是正确的。如果您的项目的程序集名称和默认命名空间为“ProjectName1”并且您的 DbConfiguration
类名为 DataContextConfiguration
,则 entityFramework
或 Web.config
文件中的 App.config
配置部分应如下所示:
<entityFramework codeConfigurationType="ProjectName1.DataContextConfiguration, ProjectName1">
<!-- Your EF config -->
</entityFramework>
只需确保
DataContextConfiguration
类的命名空间与 codeConfigurationType
属性中指定的命名空间相匹配。这将指示实体框架使用 DataContextConfiguration
类进行配置。
请记住在单独文件中的
DbConfigurationType
类上添加 DbContext
属性
namespace ProjectName1
{
[DbConfigurationType(typeof(DataContextConfiguration))]
public partial class APIEntities : DbContext
{
// Your context's code here
}
}
通过将自定义保存在单独的文件中,即使重新生成基于 EDMX 的类,您也可以确保配置保持不变。
参考资料: