0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: c#, маппинг, asp .net, dapper</p>
1
<p>Теги: c#, маппинг, asp .net, dapper</p>
2
<p><strong>Dapper</strong>- технология маппинга (сопоставления) результатов SQL-запросов с классами в C#. Благодаря своей легковесности, Dapper характеризуется большей производительностью и позволяет быстрее выполнять запросы, чем тот же Entity Framework.</p>
2
<p><strong>Dapper</strong>- технология маппинга (сопоставления) результатов SQL-запросов с классами в C#. Благодаря своей легковесности, Dapper характеризуется большей производительностью и позволяет быстрее выполнять запросы, чем тот же Entity Framework.</p>
3
<p>Посмотрим, каким образом можно использовать Dapper. В первую очередь добавим его в наш проект:</p>
3
<p>Посмотрим, каким образом можно использовать Dapper. В первую очередь добавим его в наш проект:</p>
4
<p>Потом определим User-модель, с которой далее будем работать:</p>
4
<p>Потом определим User-модель, с которой далее будем работать:</p>
5
public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }<p>Следующий этап - добавление в проект в папку App_Data новой БД, которую можно назвать, к примеру, userstore. Потом в этой БД нам следует определить одну таблицу, соответствующую описанию модели User:</p>
5
public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }<p>Следующий этап - добавление в проект в папку App_Data новой БД, которую можно назвать, к примеру, userstore. Потом в этой БД нам следует определить одну таблицу, соответствующую описанию модели User:</p>
6
<p>Теперь давайте добавим класс репозитория UserRepository в папку Models:</p>
6
<p>Теперь давайте добавим класс репозитория UserRepository в папку Models:</p>
7
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using Dapper; namespace DapperApplication.Models { public class UserRepository { string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; public List<User> GetUsers() { List<User> users = new List<User>(); using(IDbConnection db = new SqlConnection(connectionString)) { users = db.Query<User>("SELECT * FROM Users").ToList(); } return users; } public User Get(int id) { User user = null; using (IDbConnection db = new SqlConnection(connectionString)) { user = db.Query<User>("SELECT * FROM Users WHERE Id = @id", new { id }).FirstOrDefault(); } return user; } public User Create(User user) { using (IDbConnection db = new SqlConnection(connectionString)) { var sqlQuery = "INSERT INTO Users (Name, Age) VALUES(@Name, @Age); SELECT CAST(SCOPE_IDENTITY() as int)"; int? userId = db.Query<int>(sqlQuery, user).FirstOrDefault(); user.Id = userId; } return user; } public void Update(User user) { using (IDbConnection db = new SqlConnection(connectionString)) { var sqlQuery = "UPDATE Users SET Name = @Name, Age = @Age WHERE Id = @Id"; db.Execute(sqlQuery, user); } } public void Delete(int id) { using (IDbConnection db = new SqlConnection(connectionString)) { var sqlQuery = "DELETE FROM Users WHERE Id = @id"; db.Execute(sqlQuery, new { id }); } } } }<p>Чтобы выполнять запросы, Dapper предоставляет для объектов IDbConnection метод расширения Query<T>. Этот метод принимает в качестве параметра SQL-выражение, плюс способен возвращать объект типа T - с этим объектом сопоставляются результаты запроса.</p>
7
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using Dapper; namespace DapperApplication.Models { public class UserRepository { string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; public List<User> GetUsers() { List<User> users = new List<User>(); using(IDbConnection db = new SqlConnection(connectionString)) { users = db.Query<User>("SELECT * FROM Users").ToList(); } return users; } public User Get(int id) { User user = null; using (IDbConnection db = new SqlConnection(connectionString)) { user = db.Query<User>("SELECT * FROM Users WHERE Id = @id", new { id }).FirstOrDefault(); } return user; } public User Create(User user) { using (IDbConnection db = new SqlConnection(connectionString)) { var sqlQuery = "INSERT INTO Users (Name, Age) VALUES(@Name, @Age); SELECT CAST(SCOPE_IDENTITY() as int)"; int? userId = db.Query<int>(sqlQuery, user).FirstOrDefault(); user.Id = userId; } return user; } public void Update(User user) { using (IDbConnection db = new SqlConnection(connectionString)) { var sqlQuery = "UPDATE Users SET Name = @Name, Age = @Age WHERE Id = @Id"; db.Execute(sqlQuery, user); } } public void Delete(int id) { using (IDbConnection db = new SqlConnection(connectionString)) { var sqlQuery = "DELETE FROM Users WHERE Id = @id"; db.Execute(sqlQuery, new { id }); } } } }<p>Чтобы выполнять запросы, Dapper предоставляет для объектов IDbConnection метод расширения Query<T>. Этот метод принимает в качестве параметра SQL-выражение, плюс способен возвращать объект типа T - с этим объектом сопоставляются результаты запроса.</p>
8
<p>Теперь определим в файле web.config подключение, которое будет применяться:</p>
8
<p>Теперь определим в файле web.config подключение, которое будет применяться:</p>
9
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\userstore.mdf';Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings><p>Ну и, наконец, давайте определим контроллер, который станет использовать для работы с пользователями репозиторий:</p>
9
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\userstore.mdf';Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings><p>Ну и, наконец, давайте определим контроллер, который станет использовать для работы с пользователями репозиторий:</p>
10
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using DapperApplication.Models; namespace DapperApplication.Controllers { public class UsersController : Controller { UserRepository repo = new UserRepository(); public ActionResult Index() { return View(repo.GetUsers()); } public ActionResult Details(int id) { User user = repo.Get(id); if(user!=null) return View(user); return HttpNotFound(); } public ActionResult Create() { return View(); } [HttpPost] public ActionResult Create(User user) { repo.Create(user); return RedirectToAction("Index"); } public ActionResult Edit(int id) { User user = repo.Get(id); if (user != null) return View(user); return HttpNotFound(); } [HttpPost] public ActionResult Edit(User user) { repo.Update(user); return RedirectToAction("Index"); } [HttpGet] [ActionName("Delete")] public ActionResult ConfirmDelete(int id) { User user = repo.Get(id); if (user != null) return View(user); return HttpNotFound(); } [HttpPost] public ActionResult Delete(int id) { repo.Delete(id); return RedirectToAction("Index"); } } }<p><em><a>Источник</a></em></p>
10
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using DapperApplication.Models; namespace DapperApplication.Controllers { public class UsersController : Controller { UserRepository repo = new UserRepository(); public ActionResult Index() { return View(repo.GetUsers()); } public ActionResult Details(int id) { User user = repo.Get(id); if(user!=null) return View(user); return HttpNotFound(); } public ActionResult Create() { return View(); } [HttpPost] public ActionResult Create(User user) { repo.Create(user); return RedirectToAction("Index"); } public ActionResult Edit(int id) { User user = repo.Get(id); if (user != null) return View(user); return HttpNotFound(); } [HttpPost] public ActionResult Edit(User user) { repo.Update(user); return RedirectToAction("Index"); } [HttpGet] [ActionName("Delete")] public ActionResult ConfirmDelete(int id) { User user = repo.Get(id); if (user != null) return View(user); return HttpNotFound(); } [HttpPost] public ActionResult Delete(int id) { repo.Delete(id); return RedirectToAction("Index"); } } }<p><em><a>Источник</a></em></p>
11
11