EF Core RC2最终版问题:未为此DbContext配置任何数据库提供程序

6
在将 EF Core rc 1 替换为 EF Core rc 2 final 后,当调用下面的 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实例吗?

1个回答

3

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

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

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

详细信息在此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接