2014-07-10 4 views
3

IDataReader에서 개체 목록으로 성공적으로 매핑 할 수 있지만 한 DataRow를 가져올 때 예상대로 작동하지 않는 것 같습니다.AutoMapper를 사용하여 DataRow를 개체로 변환

나는 여기에 간단한 것을 놓치고 있습니까?

[TestFixture] 
public class AutomapperTest 
{ 
    [Test] 
    public void TestMethod1() 
    { 
     DataTable dt = new DataTable("contact"); 
     dt.Columns.Add("FirstName"); 
     dt.Columns.Add("LastName"); 
     dt.Columns.Add("Line1"); 
     dt.Columns.Add("Line2"); 
     dt.Columns.Add("Line3"); 
     dt.Columns.Add("Suburb"); 
     dt.Columns.Add("State"); 
     dt.Columns.Add("Postcode"); 

     DataRow row = dt.NewRow(); 
     row.ItemArray = new [] { "Little", "Johnny", 
           "1 Random Place", "", "", 
           "Windsor", "Qld", "4030" }; 

     var dest = Mapper.DynamicMap<myObject>(row); 

     Assert.AreEqual(row["FirstName"], "Little"); 
     Assert.IsNotNull(dest); 
     Assert.AreEqual(dest.FirstName, "Little"); 
    } 
} 

대상 유형 :

public class myObject 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Line1 { get; set; } 
    public string Line2 { get; set; } 
    public string Line3 { get; set; } 
    public string Suburb { get; set; } 
    public string State { get; set; } 
    public string Postcode { get; set; } 
} 

답변

9

당신은

https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers

UPDATE에게 자신 만의 가치 해결 구현해야합니다

public class CustomResolver : IValueResolver 
{ 
    public ResolutionResult Resolve(ResolutionResult source) 
    { 
     return source.New(Convert.ChangeType((source.Context.SourceValue as DataRow)[source.Context.MemberName], source.Context.DestinationType)); 
    } 
} 
여기

와 내가 말끔를 사용하는 것이 좋습니다 그것을

Mapper.CreateMap<DataRow,myObject>().ForAllMembers(m=>m.ResolveUsing<CustomResolver>()); 
var dest = Mapper.Map<myObject>(row); 

을 사용하는 방법입니다. 그렇게하면 데이터베이스에서 오는 데이터가 강력하게 유형화되거나 동적이 될 것이므로 Automapper는 매핑을 파악할 수 있어야합니다.

ODBC를 통해 Dapper가 CSV 파일을 읽을 수 있다고 생각합니다. 하지만 CSV의 경우 LinqToCSV Nuget 패키지를 대신 사용하는 것이 좋습니다.

+0

감사합니다. 불행한 점이 있지만, 적은 수의 열에서는 가치가없는 것 같습니다. – Geoff

+0

Automapper로 Dapper를 고려하십시오. – Darek

+0

여기에 맞춤 가치 측정기가 도움이 될 수있는 예가 있습니까? –