2

ストアド プロシージャを呼び出して DataTable を返す WCF サービスがあります。コンシューマーに送信する前に 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 からマップするには、カスタム拡張機能を追加する必要がありますか? これは関連していると思われるスレッドですが、特にプロパティ名が列名と同じであるため、AutoMapper はそのままでこれをサポートすると思いました。前もって感謝します。

4

1 に答える 1

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];
}
于 2013-04-25T19:51:03.043 に答える