.NET CoreにConsoleApplicationがあり、DbContextを依存関係に追加しましたが、エラーが発生します。
タイプ「MyContext」のオブジェクトを作成できません。設計時にサポートされるさまざまなパターンについては、 https://go.Microsoft.com/fwlink/?linkid=851728 を参照してください
追加しました:var context = Host.Services.GetRequiredService<MyContext>();
また追加しましたprivate readonly DbContextOptions<MyContext> _opts;
私のPostクラス:
using (MyContext db = new MyContext(_opts))
{
db.Posts.Add(postData);
db.SaveChanges();
}
これは私がサービスを追加した方法です:
.ConfigureServices((context, services) =>
{
services.Configure<DataOptions>(opts =>
context.Configuration.GetSection(nameof(DataOptions)).Bind(opts));
services.AddDbContext<MyContext>((provider, builder) =>
builder.UseSqlite(provider.GetRequiredService<IOptions<DataOptions>>().Value.ConnectionString));
そして、これは私のコンテキストです:
public sealed class MyContext : DbContext
{
private readonly DbContextOptions<MyContext> _options;
public DbSet<PostData> Posts { get; set; }
public DbSet<VoteData> Votes { get; set; }
public MyContext(DbContextOptions<MyContext> options) : base(options)
{
_options = options;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite("ConnectionString");
}
}
}
追加移行を試みましたが、このエラーが発生しました
私は何を間違っていますか?
私はあなたと同じ問題を抱えていました。多分それはコンソールアプリケーションのためではありませんが、エラーは同じでした。だから私は私の答えと共有する価値があると思いました。私はNET Core 3.を使用していて、問題を修正するにはIHostBuilderをIWebHostに変更する必要があります。問題はクラスのプログラムにありました。
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
に
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
Appsetting、jsonでも接続文字列を確認してください。
問題の迅速な解決策は、コンテキストにデフォルトのコンストラクターを実装することです
public MyContext() : base()
{
}
このソリューションの問題は、「OnConfiguring」関数に接続文字列を明示的に入力する必要があることです。これは推奨されません。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlite("ConnectionString");
}
}