Есть ли способ для общего возврата всех записей из таблицы с Entity Framework - PullRequest
1 голос
/ 20 июня 2009

По сути, я бы хотел реализовать такой метод.

IQueryAble GetQuery<T>(Entities db) или метод расширения Entities.GetQuery<T>()

Таким образом, вы могли бы делать такие вещи

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

, который будет возвращать выражение запроса SELECT * FROM, и, очевидно, оттуда вы можете создать дополнительные универсальные методы для сортировки, разбивки на страницы, где выражения и т. Д., Кроме того, избавят вас от необходимости повторять код для этих методов для каждой таблицы , Я знаю, что SubSonic3 очень хорошо справляется с этой задачей, но пытался дублировать некоторые функции в проекте EntityFramework, над которым я работаю. Единственное, что я вижу в EF - это CreateQuery и ObjectQuery, но оба они требуют, чтобы вы передали строку запроса, в которой вам потребуется знать имя таблицы.

1 Ответ

2 голосов
/ 20 июня 2009

Ну, можно автоматически получить строку, которую нужно вставить в метод CreateQuery.

В основном это просто string.Format("[{0}]",entitySetName);

Как вы получаете имя набора сущностей, при условии, что вы не используете что-то под названием MEST, большинство людей не используют, вы можете использовать некоторые функции, которые я написал в этот Совет , чтобы получить EntitySet для Т и от этого имени.

Как только вы это сделаете, написать метод расширения будет довольно тривиально

1012 * т.е. *

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

См. Выше совет для других используемых функций.

Надеюсь, это поможет

Alex

...