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);
}
}
}
}