Dapper.net 은 오픈소스이며, sql server, MySQL, Sqlite, SqlCE, Firebird etc 를 지원하는 MICRO-ORM 에서 높은 성능을 제공합니다.
Dapper 는 IDbConnection 에 대한 확장메소드를 제공한다. 그래서 Dapper 를 사용하기 위해서는 IDbConnection 인스턴스가 필요합니다.
Dapper 를 사용하기 위해서, project.json 파일에 Dapper 를 포함해야 합니다.. 이번에 Repository pattern 사용 그리고 생성자 injection 으로 controller 에 repository 에 주입할 것입니다.
{
"dependencies": {
"Microsoft.AspNet.Diagnostics": "1.0.0-beta2",
"Microsoft.AspNet.Hosting": "1.0.0-beta2",
"Microsoft.AspNet.Mvc": "6.0.0-beta2",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta2",
"EntityFramework.SqlServer": "7.0.0-beta2",
"Microsoft.AspNet.StaticFiles": "1.0.0-beta2",
"Dapper":"1.38.0-*"
},
"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5010",
},
"frameworks": {
"aspnet50": {}
}
}
여기서 respository 클래스의 constructor 가 있으며, 이는 SqlConnection 의 인스턴스를 생성합니다.
private IDbConnection _connection;
public EmployeeRepository()
{
_connection = new SqlConnection("Server=.\\SQLEXPRESS; Database=DemoDb; Integrated Security=SSPI");
_connection.Open();
}
Dapper 는 Query 메소드를 가지고 IDbConnection 를 확장한 것이다. 이는 쿼리를 실행하거나 strongly typed object 또는 object list 의 결과물을 mapping 해 줍니다.
public Employee Get(int? id)
{
return _connection.Query<Employee>("SELECT * FROM Employees WHERE Id = @Id", new{ Id = id }).FirstOrDefault();
}
public IEnumerable<Employee> FindAll()
{
return _connection.Query<Employee>("SELECT * FROM Employees");
}
여기서 DML 쿼리로 Execute 메소드를 사용할 수 있습니다.
public void Save(Employee employee)
{
_connection.Execute("INSERT INTO Employees(Name,Designation,JoiningDate,Remarks)
VALUES(@Name,@Designation,@JoiningDate,@Remarks)", employee);
}
public void Delete(Employee employee)
{
_connection.Execute("DELETE FROM Employees WHERE Id=@Id", employee);
}
저장프로시저 또한 가능 합니다.
public void Update(Employee employee)
{
_connection.Query("usp_UpdateEmployee", employee, commandType: CommandType.StoredProcedure);
}
이제 ASP.NET 이나 다른 .NET 어플리케이션에서 Dapper 를 사용할 수 있게 되었습니다..
이를 사용하기 위해 Dapper nuget 참조를 포함해야 합니다.