配置DbContext構造函數

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',要么在與'ConnellDbContext'相同的程序集中添加'IDbContextFactory'的實現。

我不太清楚如何解決這個問題。插入無參數構造函數很容易,但是當我這樣做時,我得到以下錯誤:

沒有為此DbContext配置數據庫提供程序。可以通過覆蓋DbContext.OnConfiguring方法或在應用程序服務提供程序上使用AddDbContext來配置提供程序。如果使用AddDbContext,那麼還要確保您的DbContext類型在其構造函數中接受DbContextOptions對象,並將其傳遞給DbContext的基礎構造函數。

我>>想想<<這意味著控制台命令沒有在我的appsettings.json文件中獲取連接字符串信息:

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

我遺漏了一些關於EF工具如何訪問源代碼以實現其魔力的東西。任何指針或線索都會非常感激。

附加信息

對安德森先生來說,我已經取得了一些進展。我添加了一個無參數構造函數並覆蓋了我的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”的呼叫不起作用的想法?

熱門答案

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


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow