配置DbContext构造函数

时间:2016-08-06 20:52:58

标签: c# entity-framework-core

我正在尝试使用EF Core工具来管理我在C#类库中设计的SqlServer数据库。它位于类库中,因为我需要在MVC6网站和一些命令行工具中使用数据库模式。

我不得不将类库转换为netapp,因为当前版本的工具不支持类库,但我不认为这是我问题的根源。

我的DbContext类看起来像这样:

public class ConnellDbContext : IdentityDbContext<ConnellUser>
{
    public ConnellDbContext( DbContextOptions<ConnellDbContext> options )
    {
    }

    // core tables
    public DbSet<Ballot> Ballots { get; set; }
    public DbSet<Campaign> Campaigns { get; set; }
    //...
}

当我在软件包管理器控制台上运行“dotnet ef迁移列表”时,收到以下错误消息:

  

在'ConnellDbContext'上找不到无参数构造函数。或   将无参数构造函数添加到'ConnellDbContext'或添加   同时实现'IDbContextFactory'   汇编为'ConnellDbContext'。

我不太清楚如何解决这个问题。插入无参数构造函数很容易,但是当我这样做时,我得到以下错误:

  

没有为此DbContext配置数据库提供程序。一个   可以通过覆盖DbContext.OnConfiguring来配置提供程序   方法或在应用程序服务提供程序上使用AddDbContext。   如果使用AddDbContext,那么还要确保您的DbContext类型   在其构造函数中接受DbContextOptions对象   将它传递给DbContext的基础构造函数。

我&gt;&gt;认为&lt;&lt;这意味着控制台命令没有在appsettings.json文件中获取连接字符串信息:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-ConnellCampaigns;Trusted_Connection=True;MultipleActiveResultSets=true;AttachDbFilename=e:\\SqlServer\\Data\\ConnellCampaigns.mdf;"
  }
}

我遗漏了一些关于EF工具如何访问源代码以实现其魔力的东西。任何指针或线索都会非常感激。

其他信息

Thanx先生给安德森先生我取得了一些进展。我添加了一个无参数构造函数并覆盖了我的DbContext类中的OnConfiguring()方法:

protected override void OnConfiguring( DbContextOptionsBuilder optionsBuilder )
{
    var builder = new ConfigurationBuilder()
        .AddJsonFile( "appsettings.json", optional: true, reloadOnChange: true );

    IConfigurationRoot config = builder.Build();

    optionsBuilder.UseSqlServer(config.GetConnectionString("DefaultConnection") );
}

这不起作用,但在对UseSqlServer()的调用中明确包含实际的连接字符串。关于为什么基于“DefaultConnection”的呼叫不起作用的想法?

1 个答案:

答案 0 :(得分:0)

public class ConnellDbContext : IdentityDbContext<ConnellUser>
{
    internal static string connection_string
    {
        get
        {
            return System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
        }
    }

    public ConnellDbContext() : base(connection_string)
    {

    }
    // core tables
    public DbSet<Ballot> Ballots { get; set; }
    public DbSet<Campaign> Campaigns { get; set; }
    //...
}