【问题标题】:IServiceCollection does not contain a definition or extension for AddNpgsqlIServiceCollection 不包含 AddNpgsql 的定义或扩展
【发布时间】:2016-09-30 21:35:57
【问题描述】:

我是第一次尝试使用 PostgreSQL,并且在构建它时遇到了一些麻烦,除非我锁定到 RC2 包,这很好。锁定 RC2 包后,我遇到了一个我似乎无法摆脱的错误,我可以使用帮助进行故障排除:

错误

Startup.cs(22,18): error CS1061: 'IServiceCollection' does not contain a definition for 'AddNpgsql' and no extension method 'AddNpgsql' accepting a first argument of type 'IServiceCollection' could be found (are you missing a using directive or an assembly reference?)

PROJECT.JSON

{
  "buildOptions": {
    "preserveCompilationContext": true,
    "emitEntryPoint": true,
    "warningsAsErrors": true,
    "debugType": "portable",

  "copyToOutput": {
      "include": [
        "wwwroot",
        "Views",
        "config.json",
        "web.config"
      ]
    }
  },

  "dependencies": {
    "AspNet.Security.OAuth.Introspection": "1.0.0-alpha1-final",
    "AspNet.Security.OAuth.Validation": "1.0.0-alpha1-final",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Mvc.Formatters.Json": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Mvc.Cors": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",

    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",

    "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Commands": "1.0.0-rc2-*",
    "Microsoft.EntityFrameworkCore.Relational": "1.0.0-rc2-final",
    "Npgsql.EntityFrameworkCore.PostgreSQL": "1.0.0-*",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0-rc2-final",

    "OpenIddict.Core": "1.0.0-*",
    "OpenIddict.EF": "1.0.0-*"
  },


  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0-rc2-3002702"
        }
      },

      "imports": [
        "dnxcore50",
        "portable-net451+win8"
      ]
    }
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+wp80+win8+wpa81+dnxcore50"
    }
  },

  "scripts": {
    "postpublish": "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "config.json",
      "web.config"
    ]
  }
}

STARTUP.CS(部分)

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddEntityFramework()
        .AddNpgsql()
        .AddDbContext<ApplicationContext>(options =>
            options.UseNpgsql("Host=localhost;Username=dev;Password=dev;Database=tesdb"));

    services.AddIdentity<tbl_ApplicationUser, tbl_ApplicationRole>()
        .AddEntityFrameworkStores<ApplicationContext>()
        .AddUserStore<CustomStore>()
        .AddDefaultTokenProviders()
        .AddOpenIddictCore<tbl_Application>
            (conf => conf.UseEntityFramework());

    services.AddAuthorization(options => {
        options.AddPolicy("Default", builder => {
            builder.RequireAuthenticatedUser();
            builder.RequireActiveUser();
        });

        options.DefaultPolicy = options.GetPolicy("Default");
    });

    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<IDatabaseInitializer, DatabaseInitializer>();
    services.AddTransient<IUtilityService, UtilityService>();
    services.AddScoped<ICommonRepository, CommonRepository>();
}

【问题讨论】:

    标签: asp.net postgresql asp.net-core entity-framework-core


    【解决方案1】:

    在 EF Core 1.1 中您需要使用以下代码:

    public class Startup
    {
        //...
    
        public void ConfigureServices(IServiceCollection services)
        {
           //...
           services.AddEntityFrameworkNpgsql();
        }
    }
    

    public class DatabaseClass : DbContext 
    {
        //...
    
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseNpgsql("my connection string");
        }
    }
    

    【讨论】:

      【解决方案2】:

      RC2 驱动程序将AddNpgsql 替换为AddEntityFrameworkNpgsql,所以 替换此代码块:

      services.AddEntityFramework()
          .AddNpgsql()
          .AddDbContext<ApplicationContext>(options =>
              options.UseNpgsql("Host=localhost;Username=dev;Password=dev;Database=tesdb"));
      

      有了这个:

      services.AddEntityFrameworkNpgsql()
          .AddDbContext<ApplicationContext>(options => 
              options.UseNpgsql("Host=localhost;Username=dev;Password=dev;Database=tesdb"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-09
        • 2022-01-03
        • 1970-01-01
        • 2020-04-02
        • 1970-01-01
        • 2019-04-14
        • 2016-09-25
        • 2020-08-20
        相关资源
        最近更新 更多