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

时间:2017-09-09 19:32:34

标签: c# visual-studio entity-framework visual-studio-2017 entity-framework-core

我正在阅读"使用Visual Studio 2017构建Web应用程序" (Philip Japikse,Kevin Grossnicklaus和Ben Dewey),我被困住了。当尝试使用Entity Framework Core为自定义执行策略创建一个类时,我得到错误CR0246"类型或命名空间名称' ExecutionStrategyContext'找不到(你错过了使用指令或汇编引用吗?)"

该文本仅指出只有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;
        }
    }
}

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

1 个答案:

答案 0 :(得分:6)

我无法提供文档链接,因为此时相关的EF Core API文档尚未更新,但在v2.0中,ExecutionStrategyDependencies类已替换为ExecutionStrategy并且protected ExecutionStrategy(DbContext context, int maxRetryCount, TimeSpan maxRetryDelay); protected ExecutionStrategy(ExecutionStrategyDependencies dependencies, int maxRetryCount, TimeSpan maxRetryDelay); 类现在具有以下构造函数:

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;
    }
}

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

{{1}}