1

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

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

这样你就可以做这样的事情

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

这将返回一个 SELECT * FROM 查询表达式,显然您可以从那里创建用于排序、分页、where 表达式等的附加通用方法,除此之外,您不必为每个表重复这些方法的代码。我知道 SubSonic3 在这方面做得很好,但试图在我正在处理的 EntityFramework 项目中复制一些功能。我在 EF 中看到的唯一内容是 CreateQuery 和 ObjectQuery,但这两者都需要您传递一个查询字符串,其中需要您知道表名。

4

1 回答 1

2

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

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

你如何获得实体集名称,假设你没有使用称为 MEST 的东西,大多数人不使用,你可以使用我在这个提示中编写的一些函数来获取 T 的 EntitySet 并从中获取名称。

一旦你这样做了,编写扩展方法对你来说应该很简单

IE

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);
}

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

希望这可以帮助

亚历克斯

于 2009-06-20T16:09:30.220 回答