2017-09-13 4 views
0

Tout fonctionnait bien jusqu'à ce que j'essaie une simple mise à jour de SQL Server de Linq. Mon code est:Linq Mise à jour de 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; 

Mais la valeur ne change pas. J'ai modélisé ceci dans LinqPad avec ceci;

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(); 

Cela me donne une erreur de temps de conception de « Propery ou indexeur « AnonymousType # 1.Quantity » ne peut pas être attribué à - il est en lecture seule. »

Je l'ai utilisé ce modèle de conception avant et il fonctionne:

  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(); 

Quelle est la différence; Qu'est-ce que je fais mal?

+1

Quelle est la vraie question? L'exception donnée pour le milieu explique bien le problème là. Demandez-vous pourquoi la partie supérieure ne change pas la base de données? –

+0

La seconde va définitivement échouer parce que vous lancez le résultat de la base de données comme un type anonyme. Le premier ressemble à ça devrait marcher. Que se passe-t-il lorsque vous codez la valeur à changer? Est-il possible que vous le «changiez» réellement à la même valeur? – Jonathan

+0

La quantité était 3 et j'ai changé le code pour être "results.Quantity = 123;" et la valeur n'a pas changé. Donc, je sais que j'essaye de le changer à une valeur différente. –

Répondre

1

Les objets anonymes sont en lecture seule.

Ainsi, la suivante devrait travail

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

results.Quantity = 1; 

this.SubmitChanges(); 

mais pas si vous utilisez new { bl.Quantity} au lieu de retourner l'ensemble du dossier.

Si le premier ne fonctionne pas, votre table n'a peut-être pas de colonne d'identité.

Si vous utilisez LinqPad, vous pouvez appeler le this.GetChangeSet().Dump(); avant de soumettre les modifications pour vérifier si des modifications ont été apportées.