2017-03-27 12 views
1

私は、ダッパーとストアドプロシージャを使用して動的結果を返す以下の方法を試しています。正しい方法でやっていますか?で、私は、任意のテーブル名を通過し、それが結果/ records.So、レコード、明らかに私の数を返すことに基づき、列が渡されたテーブル名ごとに変化するであろうどのような私のストアドプロシージャ行うmvcでdapperを使用した動的結果

using (IDbConnection dbConnection = Connection) 
{ 
    dbConnection.Open(); 

    var result = dbConnection.Query<dynamic>("LMSSP_GetSelectedTableData", 
     new 
     { 
      TableName = TableName, 
      LangaugeID = AppTenant.SelectedLanguageID, 
      UserID = AppTenant.UserID 
     }, commandType: CommandType.StoredProcedure).ToList(); 


    if (result != null) 
    { 
     // Added just for checking the data 
     foreach (var item in (IDictionary<string, object>)result.FirstOrDefault()) 
     { 
      string key = item.Key; 
      string value = item.Value.ToString(); 

     } 
    } 
} 

これを達成するために、私はdapperと一緒に動的キーワードを使用しました。

私の質問は、どのようにモデルとして表示するためにこのデータを渡し、プロパティ/列データ型ごとにビュー上のコントロールをレンダリングすることです。列OR PropertyInfoのデータ型を取得できますか?

しかし、dapperがデータベースからレコードを取得すると、dapper行の型として返されますか?

+0

これは、格納されたprocが入力に応じて異なるスキーマを返す場合のデータベース設計が悪いことを示しています。 – Rob

+0

@Robそれは、ほんの僅かのテーブル、主にシステムテーブルです。解決策を教えてもらえますか? – Rohit

答えて

2

異なるテーブルからデータをフェッチするために同じSPを使用すると、混乱します(良い設計ではありません)。しかし、技術的に問題を解決するには、制御情報のリストを持つモデルを作成することができます。制御情報の例は、

public class ControlInformation 
{ 
    public string Name { get; set; } 

    public dynamic Value { get; set; } 

    public string ControlType { get; set; } 

    // Applicable for drop down or multi select 
    public string AllValues { get; set; } 
} 

モデルは

public List<ControlInformation> ControlInformations { get; set; } 

ビューコントロールをレンダリングしますControlInformationsのリスト(制御タイプに基づいて、部分図)を持つことになります例:非常に基本的なケースは、int型と別のための別のビューをレンダリングするために休息のための景色。私は2つの部分的なビュー "IntCtrl"と "StringCtrl"を持っています。

@foreach (var item in Model.ControlInformations) 
    { 
     if (@item.ControlType == "System.Int32") 
     { 
      Html.RenderPartial("IntCtrl", item); 
     } 
     else 
     { 
      Html.RenderPartial("StringCtrl", item); 
     } 
    } 

このヘルプが必要です。

関連する問題