2017-03-27 1 views
1

다음과 같은 방법으로 dapper 및 저장 프로 시저를 사용하여 동적 결과를 반환하려고합니다. 올바른 방법으로하고 있습니까?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(); 

     } 
    } 
} 

, 나는 그것이 결과가 반환 모든 테이블 이름을 전달하고 기반으로합니다/records.So 분명히 기록의 내 번호는 열이 전달 된 테이블 이름에 따라 변경 될 것입니다 .

나는 이것을 달성하기 위해 동적 키워드와 함께 dapper를 사용했습니다.

그래서 내 질문은 모델로보기 위해이 데이터를 전달하고 속성/열 데이터 형식에 따라보기에서 컨트롤을 렌더링 할 수 있습니다. 열 또는 PropertyInfo의 데이터 형식을 가져올 수 있습니까?

그러나 dapper가 데이터베이스에서 레코드를 검색 할 때 dapper 행 유형으로 반환됩니까?

+0

내게는 저장된 프로 시저가 입력에 따라 다른 스키마를 반환하는 경우 잘못된 데이터베이스 디자인을 나타냅니다. – 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와 서로에 대한 다른보기를 렌더링 휴식을위한보기. 나는 "IntCtrl"과 "StringCtrl"2 부분보기 있습니다.

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

희망 도움말.

관련 문제