Je regarde des tutoriels sur le noyau asp.net
Dans certains tutoriels, les enseignants utilisent ce code pour mettre à jour des données dans une base de données.
DataContext db = new DataContext();
var query = db.TblUsers.where(x => x.Id == 3).single();
query.Name = "Sami";
db.TblUsers.Attach(query);
db.Entry(query).state = EntityState.Modified;
db.SaveChanges();
Mais certains intervenants utilisent ce code pour mettre à jour des données dans une base de données.
DataContext db = new DataContext();
var query = db.TblUsers.where(x => x.Id == 3).single();
query.Name = "Sami";
db.Update(query);
db.SaveChanges();
En fait, je suis confus d'utiliser lequel d'entre eux? Parce que les deux codes fonctionnent.
S'il vous plaît dites-moi ce qui est exactement différent entre ces codes?
Pour votre code actuel, il n’est pas nécessaire d’utiliser Attach
pour la première manière. Si vous souhaitez mettre à jour Model en récupérant un enregistrement depuis la base de données, veuillez utiliser la deuxième méthode, ce qui est très pratique.
Pour Attach
, il mettra l'entité du graphe dans l'état Inchangé et définira l'entité comme Modified
par db.Entry(query).state = EntityState.Modified
, les modifications apportées à la query
seront alors enregistrées dans la base de données. db.TblUsers.where(x => x.Id == 3).single()
suit déjà la query
, il n'est donc pas nécessaire d'utiliser Attach
.
Il existe deux types de requête, tracking
et no-tracking
. Si vous n'avez pas spécifiquement spécifié la requête no-tracking
comme db.TblUsers.AsNoTracking().where(x => x.Id == 3).single()
, l'entité effectuera le suivi de l'état Unchanged
.
Pour db.Update(query);
, il commence à suivre l’entité donnée dans l’état EntityState.Modified
, de sorte qu’elle sera mise à jour dans la base de données lors de l’appel de Microsoft.EntityFrameworkCore.DbContext.SaveChanges.