正在配置DbContext构造函数

本文关键字:构造函数 DbContext 配置 | 更新日期: 2023-09-27 18:01:12

我正在尝试使用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; }
    //...
}

当我在Package Manager控制台上运行"dotnet ef migrations list"时,我会收到以下错误消息:

在"ConnellDbContext"上找不到无参数构造函数。任何一个向"ConnellDbContext"添加无参数构造函数或添加在程序集为"ConnellDbContext"。

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

尚未为此DbContext配置任何数据库提供程序。A.提供程序可以通过重写DbContext.OnConfiguration方法,或者在应用程序服务提供程序上使用AddDbContext。如果使用了AddDbContext,那么也要确保您的DbContext类型在其构造函数中接受DbContextOptions对象,并且将其传递给DbContext的基构造函数。

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

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

我遗漏了一些关于EF工具如何访问源代码以发挥其魔力的内容。任何指示或线索都将不胜感激。

附加信息

感谢Anderson先生,我取得了一些进步。我在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"的呼叫不起作用?

正在配置DbContext构造函数

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; }
    //...
}