VS2017和实体框架Core 2.0中的自定义执行策略错误

Sha*_*ume 4 c# entity-framework visual-studio entity-framework-core visual-studio-2017

我正在阅读"使用Visual Studio 2017构建Web应用程序"(作者:Philip Japikse,Kevin Grossnicklaus和Ben Dewey)并且卡住了.当尝试使用Entity Framework Core为自定义执行策略创建类时,我收到错误CR0246"找不到类型或命名空间名称'ExecutionStrategyContext'(您是否缺少using指令或程序集引用?)"

该文本仅指出只有System和Microsoft.EntityFrameworkCore.Storage是必需的引用.EF Core 2.0文档似乎与文本匹配,但我不能让错误消失.

注意:本书使用Core和EF 1.1,而我使用2.0.但我没有在任何文件中看到任何暗示这是问题的文件.这堂课是:

using System;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore;

namespace SpyStore.DAL.EF
{
    public class MyExecutionStrategy : ExecutionStrategy
    {
        public MyExecutionStrategy(ExecutionStrategyContext context) :
            base(context, ExecutionStrategy.DefaultMaxRetryCount, ExecutionStrategy.DefaultMaxDelay)
        {

        }

        public MyExecutionStrategy(ExecutionStrategyContext context, int maxRetryCount, TimeSpan maxRetryDelay) :
            base(context, maxRetryCount, maxRetryDelay)
        {

        }

        protected override bool ShouldRetryOn(Exception exception)
        {
            return true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

VS2017突出显示了ExecutionStrategyContext的两个实例.我已经尝试将它们更改为'ExecutionStrategy context'而不是'ExecutionStrategyContext context',但我不认为这是我想要的,我仍然会收到错误,因为我的第一个参数是上下文.任何帮助表示赞赏!谢谢!

Iva*_*oev 7

我无法提供文档链接,因为此时相关的EF Core API文档尚未更新,但在v2.0中,ExecutionStrategyContext该类已被替换,ExecutionStrategyDependencies并且ExecutionStrategy该类现在具有以下构造函数:

protected ExecutionStrategy(DbContext context, int maxRetryCount, TimeSpan maxRetryDelay);

protected ExecutionStrategy(ExecutionStrategyDependencies dependencies, int maxRetryCount, TimeSpan maxRetryDelay);
Run Code Online (Sandbox Code Playgroud)

据此,更新的样本应该是这样的:

public class MyExecutionStrategy : ExecutionStrategy
{
    public MyExecutionStrategy(DbContext context) :
        this(context, DefaultMaxRetryCount, DefaultMaxDelay)
    {
    }

    public MyExecutionStrategy(DbContext context, int maxRetryCount, TimeSpan maxRetryDelay) :
        base(context, maxRetryCount, maxRetryDelay)
    {
    }

    public MyExecutionStrategy(ExecutionStrategyDependencies dependencies) :
        this(dependencies, DefaultMaxRetryCount, DefaultMaxDelay)
    {
    }

    public MyExecutionStrategy(ExecutionStrategyDependencies dependencies, int maxRetryCount, TimeSpan maxRetryDelay) :
        base(dependencies, maxRetryCount, maxRetryDelay)
    {
    }

    protected override bool ShouldRetryOn(Exception exception)
    {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)