2011-09-08 4 views
1

현재 Subrecic 3 with Activerecord를 사용 중입니다. 호기심으로 인해 깨끗하고 합리적인 방법으로 레코드를 업데이트하거나 삽입하는 쉬운 방법이 있습니까? 대신아음속 3 - 업데이트 삽입

var record = MyModal.SingleOrDefault(x => x.id == 1) 
if (record != null) 
{ 
    // code to update record here 
} else { 
    // code to insert a record here 
    MyModal record = new MyModal(); 
    record.attribute1 = "blah" 
    ... blah blah 
} 

답변

1

표준 ActiveRecord 템플릿은 개체 IsNew() 여부에 따라 Add() 또는 Update()를 호출하는 Save() 메서드를 제공합니다. 그것은 당신이 준 샘플에서 효과가 있습니다.

0

또한 이런 식으로 일을 할 수 있어야한다 :

  // perform insert with a linq expression 
      db.Insert.Into<PARTS_VI_PART_NUMBER>(
       x => x.ITEM_NUMBER, 
       x => x.ITEM_CLASS_CODE, 
       x => x.ITEM_DESCRIPTION, 
       x => x.MANUFACTURER 
      ).Values(
       "TEST", 
       "TEST", 
       "TEST", 
       "TEST" 
      ).Execute(); 

      // update using linq expression 
      db.Update<PARTS_VI_PART_NUMBER>() 
       .Set(x => x.ITEM_DESCRIPTION == "UPDATED", 
        x => x.ITEM_CLASS_CODE == "UPDATED2") 
       .Where(x => x.ITEM_NUMBER == "TEST") 
       .Execute(); 

      // delete inserted row with a linq expression 
      db.Delete<PARTS_VI_PART_NUMBER>(x => x.ITEM_NUMBER == "TEST").Execute(); 

는 적어도 그게 내가 내 프로젝트 중 하나를 해왔 방법이다. Insert(), Update()Delete() 메서드는 Context.cs 파일에 Context.tt에 의해 생성됩니다 ("ActiveRecord"T4 파일 사용).


편집

오, 미안 해요, 난 당신의 질문을 읽어 FORST 때, 나는 당신이 에 쉬운 방법은 "삽입"또는 "업데이트"을 요구했다 생각했지만 다시 후 그것을 읽고, 나는 당신이 "삽입, 또는 업데이 트가 이미 있다면"처럼 'upsert'일을 요구 깨닫고.

죄송합니다. 내 대답은 실제로 그것을 다루지 않습니다. 나는 그것을하는 좋은 방법을 모른다. 나는 보통 당신이하는 일을 끝내기 만하면됩니다 ... 그것을 선택하려고 시도합니다. 결과가 나오지 않으면 삽입을하십시오.

+0

걱정할 필요가 없습니다. – Jamsi

+0

그냥 Rails의 find_or_create 도우미 메서드가 있기를 바란다 : P – Jamsi

+0

오픈 소스 프로젝트 ... 자유롭게 추가하자;) 불행히도, 그것은 잘 지원되지 않는 것들 중 하나이다. Ansi sql은 'merge into'문을 제공하지만 모든 DB가이를 구현하지는 않습니다. 일부에는 고유 한 구문이 있습니다. 나는 SubSonic에 추가하는 것이 불가능할 것이라고 생각하지 않습니다. 지원되는 모든 DB에 대해 추가하고 테스트합니다. – CodingWithSpike