Dapper.SqlMapper.Queryの汎用タイプ変換:DapperRow
Dapperを使ったことがある人はみんな知っています.Dapper.SqlMapper.Queryは強いタイプのオブジェクトを直接返すことができます.つまり、私たちが言ったことです.NETのクラス(CLASS).通常、Modelを次のように定義します.
次に、DALレイヤでデータベースをクエリーします.次のようにします.
このような結果、私たちはいろいろな操作を簡単に行うことができます.しかし、テーブル内の1つのレコードまたは複数のレコードを返すなど、一般的な方法で結果を返したい場合があります.上記とは異なり、固定タイプではなく、目的のタイプを動的に返したい場合があります.
この時私たちはどうすればいいのか、私たちは考えるかもしれません.Netでの反射ですが、反射はここでは無理なので、
この時、私たちは直接このようにすることができます.
では、私たちはどうすればいいのでしょうか.簡単な方法は、同じ方法を対応するDALにコピーすることです.しかし、私たちはそうしたくありません.このビジネスには他の操作がないので、私たちが望んでいるオブジェクトを返すことです.この時、私たちは汎用的な方法でこの需要を実現することができます.汎用型については、ここでは紹介しません.
コードは次のとおりです.
あまり文章を書かないで、説明がはっきりしないところがあれば、お許しください.しかし、最後のコードは私が表現したい意味を説明できるはずです.
public partial class Goods
{
public long Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string Unit { get; set; }
public string Images { get; set; }
public string Summary { get; set; }
public string Label { get; set; }
public decimal NowPrice { get; set; }
public string NowPriceLabel { get; set; }
public byte FreeFreight { get; set; }
public int Stock { get; set; }
public int StoreId { get; set; }
public string StoreName { get; set; }
}
次に、DALレイヤでデータベースをクエリーします.次のようにします.
Goods[] data = SqlMapper.Query<Goods>(SqlConnection, sql, paras).ToArray();
このような結果、私たちはいろいろな操作を簡単に行うことができます.しかし、テーブル内の1つのレコードまたは複数のレコードを返すなど、一般的な方法で結果を返したい場合があります.上記とは異なり、固定タイプではなく、目的のタイプを動的に返したい場合があります.
SqlMapper.Query<T> //T:Goods,Person,User
この時私たちはどうすればいいのか、私たちは考えるかもしれません.Netでの反射ですが、反射はここでは無理なので、
SqlMapper.Query<T>// T ,
この時、私たちは直接このようにすることができます.
var data = SqlMapper.Query(SqlConnection, sql, paras);/* IEnumerable<dynamic>, class , , , :DapperRow, datatable DataRow。 new (DapperRow)。*/
では、私たちはどうすればいいのでしょうか.簡単な方法は、同じ方法を対応するDALにコピーすることです.しかし、私たちはそうしたくありません.このビジネスには他の操作がないので、私たちが望んでいるオブジェクトを返すことです.この時、私たちは汎用的な方法でこの需要を実現することができます.汎用型については、ここでは紹介しません.
コードは次のとおりです.
/// <summary>
/// T
/// </summary>
/// <typeparam name="T"> </typeparam>
/// <param name="table"> </param>
/// <param name="id"> </param>
/// <returns></returns>
public static T GetModel<T>(string table, int id)
{
string sql = "select * from " + table + " where Id=" + id;
return SqlMapper.Query<T>(SqlConnection, sql).AsList<T>()[0];// 【0】 , ,
}
あまり文章を書かないで、説明がはっきりしないところがあれば、お許しください.しかし、最後のコードは私が表現したい意味を説明できるはずです.