재우니의 블로그


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 참조를 포함해야 합니다.
자세한 것은 https://github.com/StackExchange/dapper-dot-net 사이트 참고하길 바랍니다.