EF连接中标签的配置命名

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

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">

请问这是正确的吗?

c# sql-server azure
1个回答
0
投票

当您迁移到 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 的类,您也可以确保配置保持不变。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.