相关疑难解决方法(0)

在实体框架中查询 DbContext.Set(TypeVariable)

我正在重构一个应用程序以反转一些依赖项。部分原始代码用于DbContext.Set<MyEntityType>()获取要查询的集合。

通过反转,使用 的代码不再明确知道 MyEntityType DbContext.Set<MyEntityType>(),所以现在我DbContext.Set(TypeVariable)改为使用。

重构在返回正确 DbSet 的范围内起作用。

但是,类型DbContext.Set(TypeVariable).LocalIList(包含类型未知) where-as 的类型DbContext.Set<MyEntityType>().LocalObservableCollection<MyEntityType>。这意味着现在不可能对 DbSet 执行 Linq。

我能够实现的最佳解决方法是强制转换为 MyEntityType 和其他实体类型实现的接口(为了清楚起见,省略了一些代码)

var set = Context.Set(targetType);
var entity = set.Local.OfType<IActionTarget>()
    .FirstOrDefault(l => l.Id == key.Id && l.EffectiveDate == key.EffectiveDate);
var querables = set as IQueryable<IActionTarget>;
entity = querables.FirstOrDefault(e => e.Id == key.Id && e.EffectiveDate == key.EffectiveDate);
Run Code Online (Sandbox Code Playgroud)

所以,两个问题:

为什么不DbContext.Set(TypeVariable)返回强类型集?

有没有更好的方法来进行依赖倒置?

应要求提供更多详细信息

这都是关于依赖的。模型包含通过 EF Code First 以典型方式(但通过Repository)持久化的 POCO 类。一个ActionEvaluator …

entity-framework

5
推荐指数
1
解决办法
9230
查看次数

标签 统计

entity-framework ×1