DbManager.ExecuteEnumerable?
От: drassokhin  
Дата: 23.09.10 21:17
Оценка:
Не так давно ExecuteEnumerable<T>, возвращающий IEnumerable<T>, был добавлен в DataAccessor, хорошо бы иметь такой метод и в DbManager'е. Иногда бывает полезно "вытащить" лишь небольшую часть результатов запроса, а существующие методы семейства Exec... этого сделать не позволяют.
Re: DbManager.ExecuteEnumerable?
От: eLVik Россия  
Дата: 24.09.10 07:34
Оценка:
Здравствуйте, drassokhin, Вы писали:

D>Не так давно ExecuteEnumerable<T>, возвращающий IEnumerable<T>, был добавлен в DataAccessor, хорошо бы иметь такой метод и в DbManager'е. Иногда бывает полезно "вытащить" лишь небольшую часть результатов запроса, а существующие методы семейства Exec... этого сделать не позволяют.


Эммм... а чем Вам ExecuteList<T>() не IEnumerable<T> ? "Вытащить лишь небольшую часть результатов запроса", оперируя в LINQ To Objects это вполне позволяет.
Re[2]: DbManager.ExecuteEnumerable?
От: Andy77 Ниоткуда  
Дата: 24.09.10 14:43
Оценка:
Здравствуйте, eLVik, Вы писали:

LV>Эммм... а чем Вам ExecuteList<T>() не IEnumerable<T> ? "Вытащить лишь небольшую часть результатов запроса", оперируя в LINQ To Objects это вполне позволяет.


А если не хочется вытягивать все записи на клиента, а критерий остановки нетривиален?
Re[3]: DbManager.ExecuteEnumerable?
От: IT Россия linq2db.com
Дата: 24.09.10 15:39
Оценка:
Здравствуйте, Andy77, Вы писали:

LV>>Эммм... а чем Вам ExecuteList<T>() не IEnumerable<T> ? "Вытащить лишь небольшую часть результатов запроса", оперируя в LINQ To Objects это вполне позволяет.

A>А если не хочется вытягивать все записи на клиента, а критерий остановки нетривиален?

ExecuteReader + MapToObject?
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: DbManager.ExecuteEnumerable?
От: Andy77 Ниоткуда  
Дата: 24.09.10 15:48
Оценка:
Здравствуйте, IT, Вы писали:

IT>ExecuteReader + MapToObject?


Да. Я просто думал, что ExecuteEnumerable именно это и делает, видимо, я ошибаюсь, и разговор идет про что-то совсем другое
Re[5]: DbManager.ExecuteEnumerable?
От: IT Россия linq2db.com
Дата: 24.09.10 16:45
Оценка:
Здравствуйте, Andy77, Вы писали:

IT>>ExecuteReader + MapToObject?

A>Да. Я просто думал, что ExecuteEnumerable именно это и делает, видимо, я ошибаюсь, и разговор идет про что-то совсем другое

С ExecuteEnumerable всё немного сложнее, т.к. внутри он контролирует время жизни DBManager. Поэтому результат вызова можно безопасно передавать куда угодно. В случае с DbManager, область применения такого метода будет ограничена временем жизни DbManager, что приведёт к неочевидностям.
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: DbManager.ExecuteEnumerable?
От: drassokhin  
Дата: 24.09.10 23:49
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Andy77, Вы писали:


IT>>>ExecuteReader + MapToObject?

A>>Да. Я просто думал, что ExecuteEnumerable именно это и делает, видимо, я ошибаюсь, и разговор идет про что-то совсем другое

IT>С ExecuteEnumerable всё немного сложнее, т.к. внутри он контролирует время жизни DBManager. Поэтому результат вызова можно безопасно передавать куда угодно. В случае с DbManager, область применения такого метода будет ограничена временем жизни DbManager, что приведёт к неочевидностям.


Так можно и полученный в результате LINQ-запроса (from x in db.GetTable<T>() where... select x) объект типа Table<T> куда-нибудь передать, потом вызвать Dispose (через using или явно) для родительского DbManager'а, а после этого попытаться использовать полученный Table<T>, тоже ведь плохо будет...

Потом, у DataAccessor.ExecuteEnumerable есть аргумент bool disposeDbManager, почему бы для DbManager.ExecuteEnumerable такой аргумент не использовать? Было бы что-то типа var myLovelyEnumerable = (new DbManager("My Connection")).SetCommand(...).ExecuteEnumerable<MyType>(..., true);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.