代码之家  ›  专栏  ›  技术社区  ›  Jeremy Coenen

有没有一种方法可以用实体框架从一个表中一般返回所有记录?

  •  1
  • Jeremy Coenen  · 技术社区  · 15 年前

    基本上,我希望实现这样的方法。

    IQueryAble GetQuery<T>(Entities db) 或扩展方法 Entities.GetQuery<T>()

    这样你就可以做这样的事

    public IQueryable<T> GetAll()
    {
    return yourEntityClasses.GetQuery<T>();
    }
    

    它将返回一个select*from查询表达式,很明显,您可以在此基础上生成用于排序、分页、where表达式等的附加通用方法,这样就可以避免为每个表重复这些方法的代码。我知道Subsonic3在这方面做得很好,但它试图在我正在研究的EntityFramework项目中复制一些功能。我在ef中看到的唯一一件事是createquery和objectquery,但这两个都要求您传递一个querystring,在其中需要您知道表名。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Alex James    15 年前

    好吧,可以获取需要自动放入createQuery方法中的字符串。

    基本上只是 string.Format("[{0}]",entitySetName) ;

    如何获得实体集名称,假设您没有使用名为mest的东西,大多数人没有,您可以使用我在其中编写的一些a函数 this Tip 要获取t的entityset,从中获取名称。

    一旦您这样做了,编写扩展方法对您来说应该是非常微不足道的。

    public static IQueryable<T> GetAll<T>(this ObjectContext context)
    {
        var wkspace = context.MetadataWorkspace;
        EntitySet set = wkspace
           .GetEntitySets(wkspace.GetCSpaceEntityType<T>())
           .Single(); 
        return context.CreateQuery<T>(string.Format("[{0}]",set.Name);
    }
    

    有关使用的其他功能,请参阅上面的提示。

    希望这有帮助

    亚历克斯

    推荐文章