如何使用AutoMapper将DataRow映射到WCF服务中的对象?

时间:2013-04-25 18:42:22

标签: automapper

我有一个WCF服务,它调用存储过程并返回一个DataTable。我想在发送给消费者之前将DataRows转换为自定义对象,但无法弄清楚如何这样做。假设我从存储过程中检索了一个客户。通过DataRow来确保客户的简短:

string lastName = dt.Rows[0]["LastName"].ToString();
string firstName = dt.Rows[0]["FirstName"].ToString();
string age = System.Convert.ToInt32(dt.Rows[0]["Age"].ToString());

我可以轻松找回客户。现在,我创建了一个Customer对象:

public Customer
{
     public string LastName {get;set;}
     public string FirstName {get;set;}
     public int Age {get;set;}
}

我从包管理器控制台加载了AutoMapper。然后,我将一个公共静态方法放在我的客户身上,如下所示:

public static Customer Get(DataRow dr)
{
     Mapper.CreateMap<DataRow, Customer>();
     return Mapper.Map<DataRow, Customer>(dr);
}

当我单步执行代码时,从Get()返回的客户中的每个属性都为null。我在这里错过了什么?我是否必须添加自定义扩展以从DataRow映射?这是thread that seems related但我认为AutoMapper会支持这种开箱即用,特别是因为属性名称与列名相同。提前谢谢。

1 个答案:

答案 0 :(得分:7)

这有效!!

public static Customer GetSingle(DataTable dt)
{
    if (dt.Rows.Count > 0) return null;

    List<Customer> c = AutoMapper.Mapper.DynamicMap<IDataReader, List<Customer>>(dt.CreateDataReader());

    return c[0];
}