2011-12-22 6 views
1

에서 SQL에 LINQ와 데이터베이스 레코드를 업데이트 : 코드는 충돌하지 않는내가 다음과 같습니다 함수가 C#을

public UpdateRecord(MyObjectModel TheObject, int TheUserID) 
{ 
    using (MyDataContextModel TheDC = new MyDataContextModel()) 
    { 
    var TheObjectInDB = (from o in TheDC.TheObjects 
          where o.ObjectID == TheObject.ObjectID 
          select new MyObjectModel()).SingleOrDefault(); 

    if (TheObject.Prop1 != null) { TheObjectInDB.Prop1 = TheObject.Prop1; } 
    if (TheObject.Prop2 != null) { TheObjectInDB.Prop2 = TheObject.Prop2; } 

    TheDC.SubmitChanges(); 
    } 
} 

을하지만 DB를 업데이트 아니에요. 무엇을 바꾸어야합니까? 대신 새로운 MyObjectMode()의 수정, O를

+0

아마도 TheObjectInDB가 null을 반환합니까? – ebb

+0

이것은 나에게'SELECT' 문처럼 보입니다. 그래서 왜 DB를'UPDATE'해야할까요? – Adam

답변

3

선택 :

var TheObjectInDB = (from o in TheDC.TheObjects 
          where o.ObjectID == TheObject.ObjectID 
          select o).SingleOrDefault(); 
+0

아 ~ !! 대답 주셔서 감사합니다, 나는있어! – frenchie

1

다음 코드는 작동하고 거의 당신이 게시 된 것과 동일합니다.

DataContext dc = new DataContext(ConnectionString); 
var q = from a in dc.GetTable<Employee>() 
     where a.EmployeeID == this.EmployeeID 
     select a; 
Employee temp = q.Single<Employee>(); 
temp.EmployeeActiveStatus = this.EmployeeActiveStatus; 
temp.EmployeeName = this.EmployeeName; 
temp.EmployeeUserID = this.EmployeeUserID; 
temp.EmployeeCreateModifyDate = this.EmployeeCreateModifyDate; 
temp.EmployeePaperWork = this.EmployeePaperWork; 
dc.SubmitChanges(); 

내가 볼 수있는 유일한 큰 차이

라인이다. 새로운 MyObjectMode을 선택 ()) SingleOrDefault()는 항상 새로운 객체 regardsess를 만들 것입니다 귀하의 질의에 select new MyObjectModel()을 모두

2

우선 당신이 데이터베이스에서 가져온 것의 이 값을 select o으로 변경하십시오.

둘째, 지역 :

if (TheObject.Prop1 != null) { TheObjectInDB.Prop1 = TheObject.Prop1; } 
if (TheObject.Prop2 != null) { TheObjectInDB.Prop2 = TheObject.Prop2; } 

당신은 조건부로 개체의 값을 업데이트합니다. 따라서 Prop1Prop2이 null 인 경우 객체의 속성이 업데이트되지 않습니다.

+0

"Prop1 및 Prop2가 null 인 경우 개체의 속성이 업데이트되지 않습니다." 네, 그게 내가 뭘 찾고 있는데요 : 만약 Prop1과 Prop2가 비어 있으면 업데이트가 없으며 Prop1에 새로운 값이 있지만 Prop2가 비어 있으면 Prop1 만 업데이트됩니다. 그것은 문제를 일으킬 것입니까? – frenchie

+0

@frenchie 아니, 문제가 있어서는 안되지만 첫 번째 부분은 분명히 않습니다. – TheBoyan

+0

좋습니다. 나는 변화를 만들었고 그것은 선택 O였다 !! 팁 고마워. – frenchie

관련 문제