You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework中:创建ExecutionStrategy的上下文与委托内上下文有何关系?

EF中创建执行策略的上下文与委托内上下文的关系

这两个BloggingContext实例没有直接的运行时关联,它们的作用和关系可以拆解为以下几点:

  • 外部上下文仅作为"配置模板"
    外部创建的db实例,唯一的作用是利用自身的配置(数据库连接信息、EF Core模型配置、数据库提供者类型等),生成匹配当前环境的ExecutionStrategy(执行策略,比如SQL Server的重试策略)。执行策略的类型和重试规则由上下文的配置决定,因此需要一个已完成配置的上下文来创建对应的策略实例。

  • 委托内的上下文是独立工作单元
    执行策略的核心逻辑是当遇到可重试的异常时,重新执行整个委托内的操作。如果复用外部的上下文,重试时上下文的跟踪状态(比如已添加/修改的实体、变更记录)会残留,导致数据逻辑混乱、重复操作等问题。因此必须在委托内重新实例化上下文,确保每次重试都是一个全新的、干净的工作单元,避免状态污染。

  • 两者共享相同的配置规则
    虽然是完全独立的实例,但它们基于同一个BloggingContext类的配置(比如OnConfiguring方法中定义的连接字符串、OnModelCreating中的模型映射),所以连接的是同一个数据库,执行的操作逻辑完全一致。

示例代码逻辑说明

using var db = new BloggingContext();
var strategy = db.Database.CreateExecutionStrategy();

strategy.Execute(
    () =>
    {
        // 每次重试都会创建全新的上下文,保证状态干净
        using var context = new BloggingContext();
        using var transaction = context.Database.BeginTransaction();

        context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });
        context.SaveChanges();

        context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/visualstudio" });
        context.SaveChanges();

        transaction.Commit();
    });

内容的提问来源于stack exchange,提问作者Donny Kwitty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:16:13