2014-10-21 2 views
1

모든 변수/필드 정렬을 쓰지 않고 Dapper를 사용하여 한 번에 객체를 업데이트하는 방법이 있는지 알아 내려고합니다.Dapper를 사용하여 객체를 사용하여 ODBC를 통해 Informix 데이터베이스 업데이트

public string UpdateAttributes(List<ItemAttribute> attributesList) 
    {  
     try 
     { 
      using (IfxConnection con = new IfxConnection(WebConfigurationManager.AppSettings["LOKICONN"].ToString())) 
      { 
       con.Open(); 
       foreach (ItemAttribute item in attributesList) 
       { 
        con.Execute("update oe_cnvwrk set cwr_response = ?, cwr_uom = ? where cwr_genero = ? and cwr_line = ?", 
         new { cwr_response = item.cwr_response, cwr_uom = item.cwr_uom, cwr_genero = item.cwr_genero, cwr_line = item.cwr_line }); 
       } 
       con.Close(); 
       return "success"; 
      } 
     } 
     catch (Exception x) 
     { 
      return x.ToString(); 
     } 
    } 

밖으로 각 변수를 맞춤법을 건너 뛸 수있는 방법이 있나요 단순히 객체를 참조 : 여기에 명시 적으로 각 필드를 철자하는 것입니다 내가 지금 뭘하는지의 예는입니까? 또는이 기간에 접근하는 더 좋은 방법은? Dapper를 사용하면 동적으로 쿼리를 사용하여 개체를 만들고 사전 정의 된 개체의 값을 채울 수 있지만 기존 개체를 업데이트 할 때 어떤 설명서 나 예제도 찾을 수 없습니다. 테이블과 객체를 변경해야하는 경우 유지 보수와 마찬가지로 큰 객체가 통증이됩니다.

+0

Informix를 알고 있지만 foreach 코드를 보면이 foreach (ItemAttribute가 대체되어야 함)가 궁금하기 때문에 궁금합니다. 'foreach (attributeList에있는 var 항목)'단지 currious 또는'foreach (attributesList에있는 문자열)' – MethodMan

답변

3

이 작동 할 수 있습니다 :

using (IfxConnection con = new IfxConnection(WebConfigurationManager.AppSettings["LOKICONN"].ToString())) 
{ 
    con.Execute("update oe_cnvwrk set cwr_response = ?cwr_response?, cwr_uom = ?cwr_uom? where cwr_genero = ?cwr_genero? and cwr_line = ?cwr_line?", attributesList); 
    return "success"; 
} 

변경 :

  • 직접 순서를 전달하는 연결을 종료 열/할 필요; 루프 할 필요가 없습니다.
  • 은 사용 가능한 데이터에서이라는 이름의 멤버를 위치 SQL에 매핑하는 특수 대용 ?foo? 구문을 사용합니다. 이것은 위치 ? sql을 사용하도록 다시 쓰여지 겠지만 예상 된 순서대로 예상 매개 변수를 추가합니다.
+0

마지막으로 시간을내어 그 성가신 작은 프로젝트에 손을 넣을 때 알아두면 좋을 것 같습니다 – Steve

+0

좋은데! 그것과 실패했지만, 그것을 완벽하게 작동했습니다. 그것은 foreach 루프 이상의 좋은 개선입니다. 개별 매개 변수를 전달하지 않아도 좋지만, 거기에 "설정 cwr_response =? cwr_re 스폰지? "부분도? 나는 이름이 지정된 테이블의 필드와 일치하는 멤버가 개체 값으로 업데이트 될 것이라고 생각합니다. 이상적으로해야 할 일은 다음과 같습니다 : con.Execute ("update oe_cnvwrk는 값을 설정합니까? cwr_genero =? cwr_genero?와 cwr_line =? cwr_line?", attributesList); – Ben

+0

@Ben은 "핵심"이 아닙니다. 이와 같은 일을하는 contrib/rainbow 프로젝트가 있습니다. 나는 그것을 특별히 지원한다고 생각하지 않지만, 그것을 추가하고 끌어 오기 요청을 제출할 수 있습니다 ... –

관련 문제