데이터베이스에서 연결이 끊어진 엔터티를 Linq에서 어떻게 업데이트할 수 있나요?

StackOverflow https://stackoverflow.com/questions/40054

  •  09-06-2019
  •  | 
  •  

문제

아래 코드가 올바르게 실행되지 않고 오류가 발생합니다. InvalidOperationExcepiton.

public void Foo()
{
 DataContext context = new DataContext();
 LinqEntity item = new LinqEntity(){ Id = 1, Name = "John", Surname = "Doe"} ;
 context.LinqEntities.Attach(item, true);
}
도움이 되었습니까?

해결책

기본적으로 엔터티는 편집 시 동시성을 확인하기 위해 모든 필드를 사용합니다.이것이 InvalidOperationException을 발생시키는 것입니다.

모든 필드에 대한 업데이트 확인 속성을 안 함으로 설정할 수 있습니다.엔터티를 수정된 대로 연결하려면 모든 필드에서 이 작업을 수행해야 합니다.이 작업이 완료되면 context.SubmitChanges()에 대한 추가 호출이 데이터를 저장합니다.

또는 원래 값을 알고 있는 경우 첨부한 다음 업데이트할 수 있지만 확인 중인 모든 값은 원래 값과 일치해야 합니다.

LinqEntity item = new LinqEntity(){ Id = 1, Name = "OldName", Surname = "OldSurname"}; 
context.LinqEntities.Attach(item);
item.Name = "John";
item.Surname = "Doe";
context.SubmitChanges();

다른 팁

데이터베이스와의 연결이 끊어졌다는 것이 무슨 뜻인지 잘 모르겠습니다.

LinqEntities 테이블에 새 행을 삽입하려고 하는 것 같습니다. 맞습니까?

그렇다면 당신은 그렇게 하고 싶을 것입니다.

context.LinqEntities.InsertOnSubmit(item);
context.Submit();

좋습니다. ID = 1인 행을 업데이트하려는 경우 다음과 같이 하면 됩니다.

DataContext context = new DataContext();
LinqEntity item = (from le in context.LinqEntities
                  where le.ID == 1
                  select le).Single();
item.Name = "John";
item.Surname = "Doe";

context.Submit();

Linq 표현식을 보다 간결한 람다로 바꿀 수도 있습니다.

LinqEntity item = context.LinqEntities.Single(le => le.ID == 1);

DataContext가 수행하는 가장 중요한 작업은 모든 변경 사항을 추적하는 것입니다. 그러면 Submit 메서드를 호출할 때 변경된 항목에 대한 Insert 문이 자동 생성됩니다.

ORM을 사용할 때 일반적으로 객체를 업데이트하기 전에 객체를 선택합니다.

당신이 사용할 수있는 DataContext.ExecuteCommand(...) 선택을 원하지 않는 경우 ORM을 우회합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top