Ответ 1
Этот вопрос касается EF 4, но для кого-то еще с EF 6 или выше вы можете использовать метод расширения AsStreaming().
http://msdn.microsoft.com/en-us/library/dn237204(v=vs.113).aspx
Я хочу определить запрос базы данных, используя LINQ и мой контекст EntityFramework, но я не хочу, чтобы возвращаемые объекты; Мне нужен datareader!
Как я могу это сделать? Это для экспорта строк в CSV.
Приветствия, Ян.
Этот вопрос касается EF 4, но для кого-то еще с EF 6 или выше вы можете использовать метод расширения AsStreaming().
http://msdn.microsoft.com/en-us/library/dn237204(v=vs.113).aspx
Если вам это нужно, вы, скорее всего, делаете что-то неожиданное. Простая итерация через материализованный результат запроса должна быть тем, что вам нужно - это путь 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())
{
}
}