entity-framework - 执行非泛型 DbContext.Set?

标签 entity-framework ef-code-first code-first dbcontext dbset

我需要执行动态集类型,这就是我想要做的(伪):

var type = GetSetType(); //System.Type
var set = context.Set(type);
var results = set.ToArray();

我知道这肯定行不通,Enumerable前任。方法仅适用于通用 IEnumerable s,但我尝试过 set.AsQueryable().Cast<object>().ToArray() ,以及 NotSupportedException抛出:“LINQ to Entities 仅支持转换 EDM 基元或枚举类型。”

执行非泛型的任何方式 DbSet

最佳答案

我应该删除我的问题,因为答案太简单了,但为了记录在案,我们就继续吧。

namespace System.Linq
{
  public static class EntityFrameworkExtensions
  {
    public static IEnumerable<object> AsEnumerable(this DbSet set)
    {
      foreach (var entity in set)
        yield return entity;
    }
  }
}

用法:

var collection = context.Set(entityType).AsEnumerable();

请注意,对返回的集合执行的任何过滤都不会发生在 SQL Server 上,但在集合枚举器上,将返回整个表。仅在加载所有行时才使用。

关于entity-framework - 执行非泛型 DbContext.Set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479272/

相关文章:

mysql - MySQL 不支持外部应用

stored-procedures - EF Code-First - 映射存储过程

entity-framework-4 - EF 代码优先 : How do I make a virtual collection private while still having it correctly create my database model?

asp.net - 在 ASP.NET 应用程序中,DbContext 存储在哪里?

c# - 存储用于 SQL 和 C# 的常量

c# - LINQ:根据列值选择重复行

c# - 如何在实例化时将迁移应用到 EF 7 上下文?

linq - 最有效的 Entity Framework 代码优先方法,用于展平/投影具有特定子实体的父实体

c# - 如何建模这个实体

c# - Entity Framework 5 Code First 中的一对一和一对多关系