[英]EF Core 2.1 - No database provider has been configured for this DbContext
[英]EF Core RC2 FinaI Issue: No database provider has been configured for this DbContext
用EF Core rc 2 final替換EF Core rc 1后,我們在調用GetService()方法時遇到無效的操作異常。 這里的目標是從任何給定的DbSet獲取相應的DbContext:
public static ObservableCollection<TEntity> Local<TEntity>(this DbSet<TEntity> set)
where TEntity : class
{
var context = set.GetService<DbContext>();
...
}
異常完整消息:
沒有為此DbContext配置數據庫提供程序。 可以通過覆蓋DbContext.OnConfiguring方法或在應用程序服務提供程序上使用AddDbContext來配置提供程序。 如果使用AddDbContext,那么還要確保您的DbContext類型在其構造函數中接受DbContextOptions對象,並將其傳遞給DbContext的基礎構造函數。
我們實際上是在OnConfiguring中設置數據庫提供程序:
protected override void OnConfiguring(DbContextOptionsBuilder builder)
{
base.OnConfiguring(builder);
var connStringBuilder = new SqlConnectionStringBuilder();
connStringBuilder.UserID = "MyUserID";
...
builder.UseSqlServer(connStringBuilder.ConnectionString);
}
所以似乎問題來自方法GetService()沒有為給定的DbSet解析正確的DbContext實例?
在向EF團隊報告此問題后,他們會帶來以下解決方法:
public static ObservableCollection<TEntity> Local<TEntity>(this DbSet<TEntity> set)
where TEntity : class
{
var context = set.GetService<ICurrentDbContext>().Context;
...
}
注意使用接口ICurrentDbContext而不是DbContext 。
細節在這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.