2009-09-03 3 views
3

와 기록을 존재합니다이 내가 LINQ와 레코드를 저장하는 데 사용되는 방법입니다 LINQ

을 :

public void SaveEmployee(Employee employee) 
    { 

     using (BizNetDB db = new BizNetDB()) 
     { 
      BizNet.SqlRep.Data.Employee oldEmployee = (from e in db.Employees 
                 where e.EmployeeID == employee.EmployeeID 
                select e).SingleOrDefault(); 
      if (oldEmployee == null) 
      { 
       oldEmployee = new BizNet.SqlRep.Data.Employee(); 
       oldEmployee.BirthDate = employee.BirthDate; 
       oldEmployee.WorkRole = employee.WorkRole; 
       oldEmployee.CurrentFlag = employee.CurrentFlag; 
       oldEmployee.HireDate = employee.HireDate; 
       ... 
       db.Employees.InsertOnSubmit(oldEmployee); 
      } 
      else 
      { 
       if (oldEmployee.BirthDate.Date != employee.BirthDate.Date) 
        oldEmployee.BirthDate = employee.BirthDate; 
       if (oldEmployee.CurrentFlag != employee.CurrentFlag) 
        oldEmployee.CurrentFlag = employee.CurrentFlag; 
       if (oldEmployee.HireDate.Date != employee.HireDate.Date) 
        oldEmployee.HireDate = employee.HireDate; 
      } 

      oldEmployee.ModifiedDate = DateTime.Now; 
      db.SubmitChanges(); 
      employee.EmployeeID = oldEmployee.EmployeeID; 
     } 
    } 

내 질문은 (내 Q는 다음과 같습니다). if 문은 네스케이리입니까? 왜 체크하지 않고 할당을하지 않으시겠습니까? mybe if 블록이 더 많은 CPU를 사용합니다 ..

b. 왜 새 레코드 블록과 업데이트 블록을 창안해야합니까? 당신이 그것을 문에 경우 당신이 필요로하는 유일한 이유는 일을하는지 ...

+0

a. 값을 할당하기 전에 if 문은 값이 실제로 변경되지 않으면 컨텍스트가 업데이트 된 것으로 표시하지 않도록 유지해야합니다. b는 조셉에 의해 아래에서 잘 다루어진다. –

답변

6

방법을

레코드가 새로운 그것은

db.Employees.InsertOnSubmit(oldEmployee); 

을 할 것입니다 다음 업데이트 루틴 진행 그것을 새롭게 삽입하십시오. 그래서 if 문을 사용하십시오.

내가 대신 이런 짓을 했을까 :

public void SaveEmployee(Employee employee) 
{ 
    using (BizNetDB db = new BizNetDB()) 
    { 
     BizNet.SqlRep.Data.Employee oldEmployee = 
        (from e in db.Employees 
        where e.EmployeeID == employee.EmployeeID 
        select e).SingleOrDefault(); 

     if (oldEmployee == null) 
     { 
      oldEmployee = new BizNet.SqlRep.Data.Employee(); 
      db.Employees.InsertOnSubmit(oldEmployee); 
     } 

     if (oldEmployee.BirthDate.Date != employee.BirthDate.Date) 
      oldEmployee.BirthDate = employee.BirthDate; 
     if (oldEmployee.CurrentFlag != employee.CurrentFlag) 
      oldEmployee.CurrentFlag = employee.CurrentFlag; 
     if (oldEmployee.HireDate.Date != employee.HireDate.Date) 
      oldEmployee.HireDate = employee.HireDate; 

     oldEmployee.ModifiedDate = DateTime.Now; 
     db.SubmitChanges(); 
     employee.EmployeeID = oldEmployee.EmployeeID; 
    } 
} 

는 또한 다른 하나의 객체의 속성을 매핑 할 수있는 방법이 있다고 생각하지만, 그 순간에 나를 탈출. 어쨌든 나중에 ModifiedDate 및 EmployeeID를 사용하여 다른 일을하고있는 것으로 보이기 때문에 어쨌든 수행하려는 작업에 대해서는 작동하지 않을 수 있습니다.

+0

당신은 매핑을 위해 어떤 ex를 가지고 있습니까? – ari

관련 문제