HTML Diff
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&lt;User&gt; GetUsers() { List&lt;User&gt; users = new List&lt;User&gt;(); using(IDbConnection db = new SqlConnection(connectionString)) { users = db.Query&lt;User&gt;("SELECT * FROM Users").ToList(); } return users; } public User Get(int id) { User user = null; using (IDbConnection db = new SqlConnection(connectionString)) { user = db.Query&lt;User&gt;("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&lt;int&gt;(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&lt;T&gt;. Этот метод принимает в качестве параметра 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&lt;User&gt; GetUsers() { List&lt;User&gt; users = new List&lt;User&gt;(); using(IDbConnection db = new SqlConnection(connectionString)) { users = db.Query&lt;User&gt;("SELECT * FROM Users").ToList(); } return users; } public User Get(int id) { User user = null; using (IDbConnection db = new SqlConnection(connectionString)) { user = db.Query&lt;User&gt;("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&lt;int&gt;(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&lt;T&gt;. Этот метод принимает в качестве параметра SQL-выражение, плюс способен возвращать объект типа T - с этим объектом сопоставляются результаты запроса.</p>
8 <p>Теперь определим в файле web.config подключение, которое будет применяться:</p>
8 <p>Теперь определим в файле web.config подключение, которое будет применяться:</p>
9 &lt;connectionStrings&gt; &lt;add name="DefaultConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\userstore.mdf';Integrated Security=True" providerName="System.Data.SqlClient"/&gt; &lt;/connectionStrings&gt;<p>Ну и, наконец, давайте определим контроллер, который станет использовать для работы с пользователями репозиторий:</p>
9 &lt;connectionStrings&gt; &lt;add name="DefaultConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\userstore.mdf';Integrated Security=True" providerName="System.Data.SqlClient"/&gt; &lt;/connectionStrings&gt;<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