Comment puis-je mettre à jour un enregistrement par rapport à un ID spécifique dans LINQ to SQL?
LINQ est un outil de requête (Q = Query) - il n'y a donc pas de moyen magique LINQ de mettre à jour uniquement la seule ligne, sauf via le contexte de données (orienté objet) (dans le cas de LINQ-to-SQL). Pour mettre à jour les données, vous devez les récupérer, mettre à jour l'enregistrement et soumettre les modifications:
using(var ctx = new FooContext()) {
var obj = ctx.Bars.Single(x=>x.Id == id);
obj.SomeProp = 123;
ctx.SubmitChanges();
}
Ou écrivez un SP qui fait la même chose dans TSQL, et exposez le SP à travers le contexte de données:
using(var ctx = new FooContext()) {
ctx.UpdateBar(id, 123);
}
En l'absence d'informations plus détaillées:
using(var dbContext = new dbDataContext())
{
var data = dbContext.SomeTable.SingleOrDefault(row => row.id == requiredId);
if(data != null)
{
data.SomeField = newValue;
}
dbContext.SubmitChanges();
}
DataClassesDataContext dc = new DataClassesDataContext();
FamilyDetail fd = dc.FamilyDetails.Single(p => p.UserId == 1);
fd.FatherName=txtFatherName.Text;
fd.FatherMobile=txtMobile.Text;
fd.FatherOccupation=txtFatherOccu.Text;
fd.MotherName=txtMotherName.Text;
fd.MotherOccupation=txtMotherOccu.Text;
fd.Phone=txtPhoneNo.Text;
fd.Address=txtAddress.Text;
fd.GuardianName=txtGardianName.Text;
dc.SubmitChanges();
AdventureWorksDataContext db = new AdventureWorksDataContext();
db.Log = Console.Out;
// Get hte first customer record
Customer c = from cust in db.Customers select cust where id = 5;
Console.WriteLine(c.CustomerType);
c.CustomerType = 'I';
db.SubmitChanges(); // Save the changes away
J'ai trouvé une solution de contournement il y a une semaine. Vous pouvez utiliser des commandes directes avec "ExecuteCommand
":
MDataContext dc = new MDataContext();
var flag = (from f in dc.Flags
where f.Code == Code
select f).First();
_refresh = Convert.ToBoolean(flagRefresh.Value);
if (_refresh)
{
dc.ExecuteCommand("update Flags set value = 0 where code = {0}", Code);
}
Dans l'instruction ExecuteCommand
, vous pouvez envoyer la requête directement, avec la valeur de l'enregistrement spécifique que vous souhaitez mettre à jour.
valeur = 0 -> 0 est la nouvelle valeur de l'enregistrement;
code = {0} -> est le champ où vous enverrez la valeur du filtre;
Code -> est la nouvelle valeur du champ;
J'espère que cette référence vous aidera.