web-dev-qa-db-fra.com

Mettre à jour à l'aide de LINQ to SQL

Comment puis-je mettre à jour un enregistrement par rapport à un ID spécifique dans LINQ to SQL?

44
Don Of Qau

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);
}
55
Marc Gravell

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();
}
5
spender
 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();
2
Deepak Goyal
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
2
Priyank Bolia

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.

0
user735038