EF Core RC2 FinaI问题:没有为此DbContext配置数据库提供程序

E-B*_*Bat 5 .net c# entity-framework

用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>();
            ...
}
Run Code Online (Sandbox Code Playgroud)

异常完整消息:

没有为此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);
}
Run Code Online (Sandbox Code Playgroud)

所以似乎问题来自方法GetService()没有为给定的DbSet解析正确的DbContext实例?

E-B*_*Bat 3

向 EF 团队报告此问题后,他们提出了以下解决方法:

public static ObservableCollection<TEntity> Local<TEntity>(this DbSet<TEntity> set)
            where TEntity : class
{
    var context = set.GetService<ICurrentDbContext>().Context;            
    ...
}
Run Code Online (Sandbox Code Playgroud)

请注意使用接口ICurrentDbContext而不是DbContext

详细信息在这里