Быстрый доступ к базе данных на C# (Часть 1)

Удивительно сколько народу пользуется 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. То есть открываете соединение и спокойно выполняете запросы. 



Внимание!!! Если ты копируешь эту статью себе на сайт, то оставляй ссылку непосредственно на эту страницу. Спасибо за понимание

Комментарии

Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.

Добавить Комментарий

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне