实体框架6无法识别AddSqlServer()

时间:2015-04-10 19:03:44

标签: entity-framework asp.net-core asp.net-core-mvc vs-2015-preview

我正在尝试将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完成所有操作时设置上述设置?

4 个答案:

答案 0 :(得分:1)

EF6是一个与EF7完全不同的框架,没有UseSqlServer扩展方法。

答案 1 :(得分:1)

正如@ErikEJ在他的回答中提到的,EF6与EF7非常不同,并且没有任何在Startup.cs中工作的实用工具。但是,这并不是说它不可能;我正在使用我自己的项目,使用类似于以下内容的行:

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

这样您就可以使用MyEf6DbContext注入您的控制器和其他服务,就像您期望的那样!你必须做更多的工作来获得身份3,以便与EF6一起使用,但它们都是非常可插拔的。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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