簡體   English   中英

EF Core RC2 FinaI問題:沒有為此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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM