2017-09-13 12 views
0

업데이트 Linq에서 간단한 SQL Server 업데이트를 시도 할 때까지 모두 잘 실행되었습니다. 내 코드 :Linq SQL

DataClasses1DataContext db = new DataClasses1DataContext("mySQLServer"); 
     db.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["mySQLServer"].ToString(); 

     var results = (from bl in db.a_Bellows_Lots 
         where bl.Job == this.theJob 
         where bl.BellowsLot == this.theLot 
         select bl).SingleOrDefault(); 

     results.Quantity = this.theQuantity; 
     try 
     { 
      db.SubmitChanges(); 
     } 
     catch (Exception ex) 
     { 
      error += " " + ex.Message; 

그러나 값은 변경되지 않습니다. 나는 이것을 LinqPad에서 모델링했다.

string JobNumber = "A2559038A"; 
string LotNumber = "17213A"; 

var results = (from bl in a_Bellows_Lots 
      where bl.Job == JobNumber 
      where bl.BellowsLot == LotNumber 
      select new 
      { 
       bl.Quantity 
      }).SingleOrDefault(); 

results.Quantity = 1; 

this.SubmitChanges(); 

이 나에게의 설계 시간 오류 준다 "때에 프로퍼티 또는 인덱서 'AnonymousType # 1.Quantity는'할당 할 수 없습니다 -이 읽기 전용입니다."

나는 전에이 디자인 모델을 사용했습니다 그것은 작동합니다

  DataClasses1DataContext db = new DataClasses1DataContext("mySQLServer"); 
     db.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["mySQLServer"].ToString(); 

     var results = (from x in db.a_Cleaning_Logs 
         where x.CleaningLogID == CleaningLogID 
         select x).SingleOrDefault(); 

     results.EndTime = EndDate; 
     results.EmployeeOut = employeeOut; 
     results.CleaningDone = cleaningDone; 
     db.SubmitChanges(); 

는 차이가 무엇입니까; 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+1

실제 질문은 무엇입니까? 중간 부분에 대한 예외는 그곳의 문제를 잘 설명합니다. 왜 윗부분이 데이터베이스를 변경하지 않는지 묻고 있습니까? –

+0

익명 형식으로 db에서 결과를 캐스팅하기 때문에 두 번째 쿼리는 실패합니다. 첫 번째는 제대로 작동하는 것처럼 보입니다. 값을 변경하기 위해 하드 코딩을하면 어떻게됩니까? 실제로 같은 값으로 "변경"하고있을 가능성이 있습니까? – Jonathan

+0

수량은 3이었고 코드를 "results.Quantity = 123;"으로 변경했습니다. 그 값은 변하지 않았다. 그래서 저는 그것을 다른 가치로 바꾸려고합니다. –

답변

1

익명 개체는 읽기 전용입니다.

그래서 다음 해야 작업

var results = (from bl in a_Bellows_Lots 
     where bl.Job == JobNumber 
     where bl.BellowsLot == LotNumber 
     select bl).SingleOrDefault(); 

results.Quantity = 1; 

this.SubmitChanges(); 

하지만 대신 전체 레코드를 반환하는 new { bl.Quantity}를 사용하는 경우.

전자가 작동하지 않으면 테이블에 ID 열이없는 것일 수 있습니다.

LinqPad를 사용하는 경우 변경 사항을 제출하기 전에 this.GetChangeSet().Dump();으로 전화하여 변경 사항이 있는지 확인할 수 있습니다.