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实例?
向 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。
详细信息在这里
| 归档时间: |
|
| 查看次数: |
2417 次 |
| 最近记录: |