Comment puis-je mettre à jour un enregistrement par rapport à un ID spécifique dans LINQ to SQL?Mise à jour à l'aide de LINQ to SQL
Répondre
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
LINQ est un outil d'interrogation (Q = Query) - donc il n'y a aucun moyen magique LINQ pour mettre à jour seulement l'unique rangée, sauf par l'intermédiaire du contexte de données (orienté objet) (dans le cas de LINQ- to-SQL). Pour mettre à jour les données, vous devez chercher dehors, mettre à jour le dossier et soumettre les modifications:
using(var ctx = new FooContext()) {
var obj = ctx.Bars.Single(x=>x.Id == id);
obj.SomeProp = 123;
ctx.SubmitChanges();
}
Ou écrire un SP qui fait la même chose dans TSQL, et d'exposer la SP par les données contexte:
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();
}
Cela ne compilera pas; Où (pred) retournera un
. Ma faute. Corrigée. – spender
Vous pouvez utiliser le Single (pred) au lieu de Where (pred) .FirstOrDefault() ... –
public bool UpdateCustomerIno(CustomerInfo toUpdate)
{
bool successfullySaved = false;
var db = new DataClasses1DataContext();
try
{
var dbCstInfo = db.CustomerInfos
.Where(w => w.CustomerID == toUpdate.CustomerID)
.SingleOrDefault();
if (dbCstInfo != null)
{
dbCstInfo.FirstName = toUpdate.FirstName;
dbCstInfo.LastName = toUpdate.LastName;
db.SubmitChanges();
successfullySaved = true;
}
}
catch {
successfullySaved = false;
}
return successfullySaved;
}
Pas de problème ici (puisqu'il s'agit d'un nouveau contexte de données), mais il existe un bogue dans DataContext qui le rend plus efficace (pour les recherches d'identité) SingleODefault (prédicat) que Where (prédicat) .SingleOrDefault(). Aussi; Si cela échoue, pourquoi ne pas le laisser jeter une exception? Oh, et c'est IDisposable. –
Mise à jour
NorthwindDataContext db = new NorthwindDataContext();
Product product = db.Products.Single(p => p.ProductName == "Toy 1");
product.UnitPrice = 99;
product.UnitsInStock = 5;
db.SubmitChanges();
Insérer
Dim db As New NorthwindDataContext
' Create New category and Products
Dim category As New Category
category.CategoryName = "Scott's Toys"
Dim product1 As New Product
category.ProductName = "Toy 1"
Dim product2 As New Product
category.ProductName = "Toy 2"
J'ai trouvé une solution il y a une semaine. Vous pouvez utiliser des commandes directes avec « ExecuteCommand
»: Dans la déclaration 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);
}
, 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 pour le champ;
J'espère que cette référence est utile.
Pourquoi utiliser ExecuteCommand pour mettre à jour !!? Cela semble un peu étrange de le faire lorsque vous pouvez simplement mettre à jour l'objet et appeler SubmitChanges. – DazManCat
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();
- 1. Mise à jour dans LINQ to Objects
- 2. linq to sql + table de mise à jour
- 3. LINQ to SQL :: Mise à jour des données Problème
- 4. valeur mise à jour dans LINQ to SQL IEnumerable
- 5. Mises à jour LINQ to SQL
- 6. Linq à SQL mise à jour partielle?
- 7. Enregistrement de mise à jour Linq
- 8. Comment ajouter un jour à jour dans Linq to SQL
- 9. Meilleure façon de mettre à jour dans Linq To SQL
- 10. LINQ to SQL - Mise à jour des objets de contexte de données dans des classes partielles
- 11. Problème de mise à jour Linq
- 12. Grille de données pouvant être mise à jour en utilisant Linq to SQL dans WinForms
- 13. Toute raison pour laquelle cette requête de mise à jour LINQ to SQL ne fonctionne pas. .
- 14. LINQ to SQL Mise à jour par le biais des questions BLL - Meilleures pratiques
- 15. La mise à jour Linq to Sql crée un enregistrement en double
- 16. LINQ to SQL non valide Monter insert, et non sur la mise à jour
- 17. La mise à jour Linq to SQL ne fonctionne pas en utilisant le modèle Repository
- 18. Comment mettre à jour à Linq à SqL?
- 19. Mise à jour XmlDocument LINQ (peut-être)
- 20. Ajout à la clause Where d'une mise à jour dans LinQ-to-Entities
- 21. Linq to Sql - Plusieurs à plusieurs - CRUD
- 22. Mise à jour de LINQ to DATASET avec une procédure stockée
- 23. Effectuer une mise à jour avec LINQ
- 24. Mise à jour des données Linq
- 25. table SQL problème de mise à jour
- 26. SQL mise à jour de requête
- 27. Chaînes LINQ to SQL à enums
- 28. Linq to SQL - mappage plusieurs à plusieurs
- 29. Linq To SQL Beaucoup à beaucoup
- 30. Mise à jour à AS400 à partir de SQL 2000
@Mathieu - proposez-vous qu'il devine des valeurs pour les 200 propriétés? ils doivent venir de quelque part ... –
Désolé, j'avais quelque chose en tête qui n'est pas montré ici, mon mauvais. – Mathieu
excellent exemple de mise à jour. merci ami –