Удивительно сколько народу пользуется Entity Framework и даже среди тех, кто работает над сайтами с высокой нагрузкой. Я как-то использовал Entity Framework и на мой взгляд достаточно удобно, но стоит ли удобство скорости?
Я раньше больше предпочитал использовать собственный код, но с недавних пор перешел на небольшое расширение для C# под названием Dapper (http://code.google.com/p/dapper-dot-net/), который сокращает скорость мапинга данных незначительно.
Вот сравнение скорости, которое можно найти на официальном сайте:
Method | Duration | Remarks |
Hand coded (using a SqlDataReader) | 47ms | |
Dapper ExecuteMapperQuery | 49ms | |
ServiceStack.OrmLite (QueryById) | 50ms | |
PetaPoco | 52ms | Может быть быстрее |
BLToolkit | 80ms | |
SubSonic CodingHorror | 107ms | |
NHibernate SQL | 104ms | |
Linq 2 SQL ExecuteQuery | 181ms | |
Entity framework ExecuteStoreQuery | 631ms |
Как видите Entity Framework слишком медленный, чтобы использовать его в сайтах с высокой нагрузкой.
Работает Dapper достаточно просто, нужно только добавить один файл к проекту и добавить его пространство имен к файлу:
using Dapper;
У класса SqlConnection появится еще один метод Query, который можно использовать примерно так:
List= Query("select ...", new { });
Второй параметр у Query – это объект, который будет определять параметры, которые вы хотите передать в запрос. Ну а результат – это список из объектов определенного типа.
Если у вас есть таблица с людьми Member и вы хотите получить в коде список людей, то можно создать класс Member в C# следующим образом:
class Member { int MemberID { get; set; } string Name { get; set; } . . . . . . }
Ну и теперь получаем список людей:
Listmembers =
(List)Query("select * from Member", new { });
Если нужно найти только одну строку:
Member members =
Query("select * from Member where MemberID = @id",
new { id = 100 });
Единственный недостаток - Dapper не умеет сохранять данные в базу данных. Но для этих целей я написал небольшой класс, который решает всю проблему и это тема отдельного разговора. Сегодня ограничимся небольшой статьей про Dapper.
Есть еще недостаток - нужно самому описывать таблицы базы данных, но это так же решаемо. Легко написать программку, которая будет генерировать для вас классы. У меня где-то есть что-то простое и я попозже наверно выложу свою программку, если кому будет интересно.
Итак, Dapper - это быстрый маппинг данных из результата запроса в свойства объекта в любой объект. Плюс этого способа - вы можете создать класс с любыми свойствами, даже из двух разных таблиц и написать связанный запрос, который будет выполнятся Dapper-ом и он замапит связанный запрос в один объект.
Кстати, если нужно выполнить запрос, который не возвращает данные (обновление или удаление данных), то можно использовать метод Execute. Напоминаю, эти методы будут доступны если вы подключите namespace Dapper к своему модулю и будут доступны у объекта SqlConnection. То есть открываете соединение и спокойно выполняете запросы.
Внимание!!! Если ты копируешь эту статью себе на сайт, то оставляй ссылку непосредственно на эту страницу. Спасибо за понимание
Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.
Добавить Комментарий