驅動程序似乎是越野車/根本沒有更新。我找到了一種通過修改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) { }
。
編輯:請注意,它看起來像覆蓋了默認行爲,在部署到服務器之前它可能不可見。