1

なぜエラーが発生するのかはっきりしません。私が最初に私のプロジェクトを足場にした時、マイグレーションとアップデートデータベースのコマンドは正常に動いたが、アプリケーションの変更がほとんどなかったので、私はthis errorを得ていた。周りに浮い唯一の解決策は、thisです:'TContext'にパラメータのないコンストラクタが見つかりません

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); 
    } 
} 

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

答えて

2

あなたはこの

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

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

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

もう一つの理由を持っていたが、それは方法自体の上部にOnModelCreating(){}メソッド内base.OnModelCreating(builder);コールなしOnModelCreating(ModelBuilder builder){}オーバーライドを見ていたということです。なぜか...私はいくつかのことを試してみましたが、低レベルでした。見ていたパラメータのないコンストラクタを単純にインクルードしていたのが原因です。

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" 
    } 
} 
} 

NB:あなたは、任意の移行を行った場合以前のSqlServerでは、生成されたアイテムは長い有効なredoです移行。

+0

DbContextの表示方法を変更して投稿を更新しました。 – lbrahim

+0

StartUpとDbContextのコード[here](https://github.com/aspnet/EntityFramework/issues/7641#issuecomment-290339592)があります。 – lbrahim

関連する問題