ドライバはバグであると思われます。私はDbContextを変更することでそれを回避する方法を見つけました。理論的には
、これは働いているはずですが、それはしていません:
private string _connectionString;
public ApplicationDbContext(string connectionString) : base()
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (_connectionString == null)
base.OnConfiguring(optionsBuilder); // Normal operation
// We have a connection string
var dbContextOptionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer(_connectionString);
base.OnConfiguring(dbContextOptionsBuilder);
}
LinqPad EFコアドライバは、「文字列を受け入れるコンストラクタを介して、」あなたが指定した場合でも、パラメータなしのコンストラクタを探し続けています。それはドライバーのバグのようだ。
それで、私はそれが望んでいた、無パラメータのコンストラクタを与えました。私はIoC/appsettings.json設定リーダーがロードされていないので接続文字列をハードコードしなければならず、DbContextでそれを別々にロードする気がしません。しかし、それは動作し、LinqPadのEF Coreクエリを私のモデルからテストすることができます。
これは私のために正常に動作します:
private bool _isDebug = false;
public ApplicationDbContext() : base()
{
_isDebug = true;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!_isDebug)
base.OnConfiguring(optionsBuilder); // Normal operation
// We are in debug mode
var dbContextOptionsBuilder = new DbContextOptionsBuilder();
// Hardcoded connection string
optionsBuilder.UseSqlServer("data source=XXXX;initial catalog=XXXX;persist security info=True;user id=XXXX;password=XXXX;MultipleActiveResultSets=True;App=EntityFramework");
base.OnConfiguring(dbContextOptionsBuilder);
}
は、これは当然の既存public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
に加えています。
編集:これは、サーバーに展開するまで表示されないデフォルトの動作を上書きするように見えます。