Как я могу вернуть устройство чтения данных при использовании Entity Framework 4? - PullRequest
15 голосов
/ 08 мая 2011

Я хочу определить запрос к базе данных, используя LINQ и мой контекст EntityFramework, но я не хочу, чтобы объекты возвращались; Я хочу читать данные!

Как я могу это сделать? Это для экспорта строк в CSV.

Приветствия, Ян.

Ответы [ 2 ]

19 голосов
/ 08 мая 2011

Если вам это нужно, скорее всего, вы делаете что-то неожиданное. Простая итерация по материализованному результату запроса должна быть именно тем, что вам нужно, то есть способом ORM. Если вам не нравится, используйте SqlCommand напрямую.

DbContext API упрощен и поэтому не содержит многих функций, доступных в ObjectContext API. Доступ к считывателю данных является одним из них. Вы можете попытаться преобразовать DbContext в ObjectContext и использовать более сложный API:

ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
using (var connection = objContext.Connection as EntityConnection)
{
    // Create Entity SQL command querying conceptual model hidden behind your code-first mapping
    EntityCommand command = connection.CreateCommand();
    command.CommandText = "SELECT VALUE entity FROM ContextName.DbSetName AS entity";
    connection.Open();
    using (EntityDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess))
    {
        ...
    }
}

Но чистый способ ADO.NET намного проще и быстрее, потому что в первом примере все еще используется отображение запроса в запрос SQL:

using (var connection = new SqlConnection(Database.Connection.ConnectionString))
{
    SqlCommand command = connection.CreateCommand();
    command.CommandText = "SELECT * FROM DbSetName";
    connection.Open();
    using(SqlDataReader reader = command.ExecuteReader())
    {

    }
}
6 голосов
/ 20 ноября 2013

Этот вопрос касается EF 4, но для всех, кто имеет EF 6 или выше, вы можете использовать метод расширения AsStreaming ().

http://msdn.microsoft.com/en-us/library/dn237204(v=vs.113).aspx

...