Entity Framework 6 无法识别 AddSqlServer()

Entity Framework 6 not recognizing AddSqlServer()

我正在尝试将 EF6 与 VS2015 CTP 和 ASP.NET MVC 6 一起使用。它无法识别我在使用 EF7 时添加的 startup.cs 中下面提到的代码。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddEntityFramework(Configuration)
          .AddSqlServer()
          .AddDbContext<VNDBContext>(options => options.UseSqlServer(Configuration.Get("Data:VNDBContext:ConnectionString")));

        services.AddMvc().Configure<MvcOptions>(options =>
        {
            var jsonFormatter = (JsonOutputFormatter)options.OutputFormatters
            .Where(o => o.Instance.GetType() == typeof(JsonOutputFormatter)).First().Instance;
            jsonFormatter.SerializerSettings.ReferenceLoopHandling =
                 ReferenceLoopHandling.Ignore;

        });
        services.AddSingleton<INodeService, NodeService>();
    }

如果我使用 EF7,它还有其他问题,因为它还不成熟。

在 MVC6 中执行所有操作但使用 EF6 时如何设置上述设置?

EF6 是一个与 EF7 截然不同的框架,并且没有 UseSqlServer 扩展方法。

正如@ErikEJ 在他的回答中提到的那样,EF6 与 EF7 有很大不同,并且没有任何用于在 Startup.cs 中工作的实用程序。但是,这并不是说这是不可能的。我在自己的项目中使用类似于以下内容的行来执行此操作:

services.AddTransient<MyEf6DbContext>(sp => new MyEf6DbContext(Configuration.Get("Data:VNDBContext:ConnectionString")));

这允许您使用 MyEf6DbContext 注入您的控制器和其他服务,就像您期望的那样!您必须做一些更多的工作才能获得 Identity 3 等才能与 EF6 一起使用,但它们都是非常可插入的。

实际上,您可以将 EF6 与 dnx451 和 MVC6 结合使用,这样您就可以访问所有新的 API。不过,EF6 并非开箱即用,无法与新的 DependencyInjection 系统配合使用,因此您需要自行配置它。此外,迁移根本不起作用。我编写了一些替换 'k/dnx' 命令,它们可以像 EF7 项目一样处理迁移。

实际上在最新的更新中他们已经改变了一点!他们将包重命名为 EntityFramework.MicrosoftSqlServer 尝试在 nuGet 管理器中搜索它,您将获得您正在寻找的所有方法。