2009-10-22 3 views
1

Linq to Sql을 사용하여 데이터베이스에서 레코드를 업데이트하려고합니다. 내가하려고하지만 경우 새 개체에서 오는 모든 필드를 업데이트 할이 :Linq to Sql - 기본 키를 제외한 모든 필드 업데이트

originalObject = newObject 
db.submitChanges() 

는 생각 때문에 변경 사항을 저장하지 않습니다 기본 키 변경 (또는 무언가 함께하고있다

Dim originalKey = originalObject.MyPrimaryKey 
originalObject = newObject 
originalObject.MyPrimaryKey = originalKey 
db.SubmitChanges() 

을 ...하지만 그 중 하나가 작동하지 않습니다 : 그것은 오류를 제공하지 않습니다하지만, 데이터베이스에있는 개체)

를 업데이트하지 않습니다 .. 그 라인은 내가 좋아 덮어 쓰기를 시도. 개별 속성을 설정하면 저장됩니다 (예 : originalObject.PropertyName = "새 값"). 그런 다음 submitChanges가 작동하지만 객체에 개별적으로 업데이트하지 않으려는 약 100 개의 속성이 있습니다. 그렇다면 어떻게 객체와 submitChanges()를 성공적으로 업데이트 할 수 있습니까?

답변

1

수정 된 엔티티 개체가 이미있는 경우 (yourDataContext). (yourTable) .Attach (modifiedObject, true) 다음에 SubmitChanges를 사용할 수 있어야합니다.

0

아래 코드의 목표는 분리 된 개체의 필드를 데이터베이스의 첨부 된 개체로 매핑하지 않고 데이터베이스의 엔터티를 업데이트하는 것입니다.

var dtCxt = Util.GetDtCxt(); 
dtCxt.YourTable.Attach(detachedObject, GetObjectById(detachedObject.id)); 
dtCxt.SubmitChanges(); 

GetObjectById는 다른 DataContext를 사용합니다. 당신은 이것을해야합니다.

private Incoterm GetObjectById(int id) 
{ 
    var dtCxt = Util.GetDtCxt(); 
    return dtCxt.YourTable.FirstOrDefault(i => i.id == id); 
}