セットアップ.netコアプロジェクトとdbコンテキストもあります。しかし、このエラーのためにdbContextの使用を開始できません
「必須の仮パラメータ「options」に対応する引数が指定されていません」
コントローラ:
public IActionResult Index()
{
using (var db = new BlexzWebDb())
{
}
return View();
}
Dbcontextコード:
public class BlexzWebDb : DbContext
{
public BlexzWebDb(DbContextOptions<BlexzWebDb> options)
: base(options)
{ }
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<AssignedRole> AssignedRoles { get; set; }
}
エラー画像が添付されています。その問題の可能な修正は何ですか?前もって感謝します
EF Coreでは、いくつかのDbContextOptionsをコンストラクターに渡すのが一般的です。
したがって、一般的に、コンストラクターは次のようになります。
public BlexzWebDb(DbContextOptions<BlexzWebDb> options) : base(options)
ご覧のとおり、パラメーターなしのコンストラクターという形式の有効なオーバーロードはありません。
したがって、これは機能しません:
using (var db = new BlexzWebDb())
代わりに
例:dbcontextを登録する場所(Startup.cs):
//typical configuration part of .net core
public void ConfigureServices(IServiceCollection services)
{
//some mvc
services.AddMvc();
//hey, options!
services.AddDbContextPool<BlexzWebDb>(options =>
options.UseSqlServer(Configuration.GetConnectionString("BlexzWebConnection")));
//...etc
これで登録部分が完了し、フレームワークからコンテキストを取得できます。例:コントローラーのコンストラクターによる制御の反転:
public class SomeController : Controller
{
private readonly BlexzWebDb _db;
//the framework handles this
public SomeController(BlexzWebDb db)
{
_db = db;
}
//etc.
最近では、サービスコレクションにDbContextを追加するために推奨される方法は、AddDbContextPool
メソッドを使用することです。
//hey, options!
//hey, DbContextPool
services.AddDbContextPool<BlexzWebDb>(options =>
options.UseSqlServer(Configuration.GetConnectionString("BlexzWebConnection")));
//etc
詳細については、 msdn を参照してください
var connectionstring = "Connection string";
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseSqlServer(connectionstring);
ApplicationDbContext dbContext = new ApplicationDbContext(optionsBuilder.Options);
@Stefanの答えに加えて、これを達成する別の方法があります。 startup.csにDbContextサービスを追加せずに、DbContextクラスのOnConfiguringメソッドでdb接続文字列を設定できます。
Setting.cs
public static class Setting
{
public static string ConnectionString { get; set; }
}
Startup.cs
Setting.ConnectionString = Configuration.GetSection("ConnectionStrings:BlexzDbConnection").Value;
BlexzWebDb.cs
public class BlexzWebDb : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(Setting.ConnectionString);
}
}
}
HomeController.cs
public class HomeController : Controller
{
private readonly BlexzWebDb db;
public HomeController()
{
this.db = new BlexzWebDb();
}
//etc.