재우니의 블로그

Slapper.Automapper 

 


Dapper 와 다른 점은 join 쿼리 구문을 간결히 쉽게 해 주는 매력이 있다. Join 하여 참조한 테이블은 테이블_필드 형식으로 기재해 줘야 하는 부분이 있다.


그리고 각 테이블의 키 필드를 Slapper.AutoMapper.Configuration.AddIdentifiers() 함수를 통해 명시해 줘야 합니다. 이게 끝이죠 ;)

간단한 하나의 테이블이나 join 이 없는 것은 dapper.simplecrud 가 좋더군용 ;)

//class
public class TestContact
{
  public int ContactID { get; set; } //primary key
  public string ContactName { get; set; }
  public List<TestPhone> TestPhones { get; set; }
}

public class TestPhone
{
  public int PhoneId { get; set; } //primary key
  public int ContactID { get; set; } // foreign key
  public string Number { get; set; }
}




//slapper.automapper

const string sql = @"SELECT tc.[ContactID] as ContactID
,tc.[ContactName] as ContactName
,tp.[PhoneId] AS TestPhones_PhoneId
,tp.[ContactId] AS TestPhones_ContactId
,tp.[Number] AS TestPhones_Number
FROM TestContact tc
INNER JOIN TestPhone tp ON tc.ContactId = tp.ContactId";

string connectionString = ""; // -- Insert SQL connection string here.

using (var conn = new SqlConnection(connectionString))
{
    conn.Open();
    {
        // Step 1: Use Dapper to return the flat result as a Dynamic.
        dynamic test = conn.Query<dynamic>(sql);

        // Step 2: Use Slapper.Automapper for mapping to the POCO Entities.
        // - IMPORTANT: Let Slapper.Automapper know how to do the mapping;
        // let it know the primary key for each POCO.
        // - Must also use underscore notation ("_") to name parameters;
        // see Slapper.Automapper docs.
        Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(TestContact), new List<string> { "ContactID" });
        Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(TestPhone), new List<string> { "PhoneID" });

        var testContact = (Slapper.AutoMapper.MapDynamic<TestContact>(test) as IEnumerable<TestContact>).ToList();

        foreach (var c in testContact)
        {
            foreach (var p in c.TestPhones)
            {
                Console.Write("ContactName: {0}: Phone: {1}\n", c.ContactName, p.Number);
            }
        }
    }
}