'DbContextOptionsBuilder'不包含'UseSqlServer'

时间:2016-10-31 12:23:54

标签: mysql asp.net-mvc entity-framework asp.net-web-api asp.net-core

我正在尝试使用C#在VS 2015 Pro(Update 3)中创建Web API,并以.NET Core为目标。

我正在关注本教程:https://docs.efproject.net/en/latest/platforms/aspnetcore/new-db.html#install-entity-framework。 但是,我连接的是MySQL数据库而不是SQL Server数据库 - 不确定它有多大差异......

无论如何,在本教程中,我必须“使用依赖注入注册我的上下文” - 所以我必须将以下行添加到 ConfigureServices 部分strong> Startup.cs 文件:

var connection = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext< Models.PropWorxContext > (options => options.UseSqlServer(connection));;

然而,VS给了我以下错误:

错误CS1061'DbContextOptionsBuilder'不包含'UseSqlServer'的定义,并且找不到接受类型'DbContextOptionsBuilder'的第一个参数的扩展方法'UseSqlServer'(您是否缺少using指令或程序集引用?)

任何想法为什么?

这就是整个Startup.cs文件的样子:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace PropWorxAPI
{
    public class Startup
    {
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        public IConfigurationRoot Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            var connection = Configuration.GetConnectionString("DefaultConnection");
            services.AddDbContext< Models.PropWorxContext > (options => options.UseSqlServer(connection));
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            app.UseMvc();
        }
    }
}

我还使用包管理器添加了MySQL包,因此我的 project.json 文件包含此条目:

*"MySql.Data.EntityFrameworkCore": "7.0.6-IR31"*

任何关于我出错的提示都会非常感激,因为我花了一整天时间试图解决这个问题:(谢谢...

6 个答案:

答案 0 :(得分:19)

SqlServer是Microsoft Sql Server而不是MySql,要使用SqlServer,您需要包&#34; Microsoft.EntityFrameworkCore.SqlServer&#34;:&#34; 1.0。*&#34;。

如果使用MySql,则有options.UseMySql

请参阅此tutorial for more

答案 1 :(得分:11)

我在使用Sql Server为数据库设置项目时也遇到了这个错误。在我的情况下,我不得不手动添加一个使用语句 -     “使用Microsoft.EntityFrameworkCore;” 。这听起来有点明显,但它让我觉得因为Visual Studio没有通过Quick Actions添加using语句。

答案 2 :(得分:3)

如果您已经安装了&#34; Microsoft.EntityFrameworkCore.SqlServer&#34;包和使用Ctrl + Space无法为您提供任何选项,使用Microsoft.EntityFrameworkCore&#34;添加&#34;手动解决了我的问题。

答案 3 :(得分:3)

缺少包裹。这对我有用。 工具-NUget软件包-软件包管理器-在安装后复制粘贴:

安装软件包Microsoft.EntityFrameworkCore.SqlServer-版本3.1.1

答案 4 :(得分:0)

在项目文件夹中,将其输入命令行:

dotnet add package Pomelo.EntityFrameworkCore.MySql -v 2.1.2

答案 5 :(得分:0)

安装Sqllite / Sqlserver紧凑型工具箱,然后创建数据库(如果未创建),然后在appsettings.json中更改连接字符串