'TContext'にパラメータのないコンストラクタが見つかりませんでした

.net-core asp.net-core asp.net-core-mvc c# entity-framework-core

質問

エラーがなぜ発生するのかはっきりしていません。私が最初に私のプロジェクトを足場にしたとき、マイグレーションとデータベースの更新コマンドはうまくいきましたが、アプリケーションのいくつかの変更の後にこのエラーが発生しました 。浮かび上がる唯一の解決策は次のとおりです。

public class BloggingContextFactory : IDbContextFactory<BloggingContext>
{
    public BloggingContext Create()
    {
        var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
        optionsBuilder.UseSqlite("Data Source=blog.db");

        return new BloggingContext(optionsBuilder.Options);
    }
}

私のDbContext:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IApplicationDbContext
{
    public DbSet<ApplicationUserCode> ApplicationUserCodes { get; set; }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
    }
}

それは私のために動作しますが、接続文字列はクラス内でハードコーディングされています。なぜこのエラーが一度に起こっていないのか、そして後でそれがしたのかどうかの明確化は、接続文字列をクラスに埋め込むよりもエレガントな解決策です。

受け入れられた回答

あなたはこれを持っていましたか

public class BloggingContext : DbContext
{
    public BloggingContext(){          // << The reason....

    }
    public BloggingContext(DbContextOptions<BloggingContext> options)
         : base(options)
    { }

   public DbSet<Blog> Blogs { get; set; }
}

別の理由は、 base.OnModelCreating(builder);使わずにOnModelCreating(ModelBuilder builder){}オーバーライドを見ていたことbase.OnModelCreating(builder);メソッド自体の先頭にあるOnModelCreating(){}メソッドを呼び出します。なぜか...私はいくつかのことを試してみましたが、低レベルでした。見ていたパラメータのないコンストラクタを単純にインクルードしていたのが原因です。

 protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);   //<< Absolutely required at the top.
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);

EDIT

//Startup.cs ConfigureServices(IServiceCollectionサービス)

 services.AddDbContext<ApplicationDbContext>(options =>
      options.UseSqlite(Configuration.GetConnectionString("SqliteConnection")));

//appsettings.json

{
  "ConnectionStrings": {
   "DefaultConnection": "Data Source=(LocalDb)\\MssqlLocalDb;Initial        Catalog=PilotSystemCore;Integrated Security=True",
"SqliteConnection" :  "Data Source=SqliteDbName.db"
 },
 "Logging": {
    "IncludeScopes": false,
     "LogLevel": {
         "Default": "Debug",
         "System": "Information",
         "Microsoft": "Information"
   }
 }
}

注意:以前にSqlServerを使用して移行した場合、生成されたアイテムは移行をやり直すのに長く有効です。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ