AddDBContext值上的Startup.cs错误不能为空

时间:2018-02-08 13:53:55

标签: c# .net-core entity-framework-core

我正在尝试使用Entity Framework将数据库连接到.NET Core中。模型和上下文是通过DB第一种方法构建的。

在我的创业公司中,我有以下几行代码:

// This method gets called by the runtime. 
////Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<PersonalProfileContext>(options => options
      .UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    services.AddMvc();
}

在我的上下文中,我有以下内容:

public virtual DbSet<Companies> Companies { get; set; }
public virtual DbSet<Qualifications> Qualifications { get; set; }
public virtual DbSet<Roles> Roles { get; set; }
public virtual DbSet<RolesCompanies> RolesCompanies { get; set; }
public virtual DbSet<RolesUsers> RolesUsers { get; set; }
public virtual DbSet<Users> Users { get; set; }

public  PersonalProfileContext(DbContextOptions<PersonalProfileContext> options) 
    : base(options)
{
    return;
}

在startup.cs中,我收到一条错误,说AddDBContext行的值不能为null。

在我的appsettings.json文件中,它是以下内容:

 {
  "DefaultConnection": {
    "ConnectionString": "" <-- Not included for safety reasons
  },

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ApplicationInsights": {
    "InstrumentationKey": "" <-- Not included for security reasons
  }
}

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这里的问题是appsettings.json的连接字符串部分不太正确。

以下是您提供的内容:

"ConnectionStrings": {
     "DefaultConnection": "" <-- Not included for safety reasons
}

而你需要的是:

services.AddDbContext<PersonalProfileContext>(options => options
  .UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

这导致以下行失败:

ConnectionStrings

由于名为DefaultConnection的{​​{1}}集合中没有连接字符串,因此:

Configuration.GetConnectionString("DefaultConnection")

返回null,这意味着:

options
  .UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

返回null,意味着null被传递到AddDbContext的调用中。

这是一个容易犯的错误,而不是一个容易发现的错误。