Quelle est la meilleure approche pour mettre à jour les données d'une table de base de données dans le cœur de travail du cadre d'entité?
Quelles sont les fonctionnalités améliorées que nous pouvons utiliser sur EF6?
Pour mettre à jour une entité avec Entity Framework Core, il s’agit du processus logique:
DbContext
Update()
méthode dans DbContext
:
Commence le suivi de l'entité donnée dans l'état Modifié de telle sorte qu'elle sera mise à jour dans la base de données lorsque la fonction
SaveChanges()
sera appelée.
La méthode de mise à jour n'enregistre pas les modifications dans la base de données; au lieu de cela, il définit des états pour les entrées dans l'instance DbContext.
Nous pouvons donc appeler la méthode Update()
avant de sauvegarder les modifications dans la base de données.
Je vais supposer quelques définitions d'objet pour répondre à votre question:
Le nom de la base de données est Store
Le nom de la table est Product
Définition de la classe de produit:
public class Product
{
public int? ProductID { get; set; }
public string ProductName { get; set; }
public string Description { get; set; }
public decimal? UnitPrice { get; set; }
}
Définition de la classe DbContext:
public class StoreDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Your Connection String");
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Order>(entity =>
{
// Set key for entity
entity.HasKey(p => p.ProductID);
});
base.OnModelCreating(modelBuilder);
}
}
Logique pour mettre à jour l'entité:
using (var context = new StoreDbContext())
{
// Retrieve entity by id
// Answer for question #1
var entity = context.Products.FirstOrDefault(item => item.ProductID == id);
// Validate entity is not null
if (entity != null)
{
// Answer for question #2
// Make changes on entity
entity.UnitPrice = 49.99m;
entity.Description = "Collector's edition";
// Update entity in DbSet
context.Products.Update(entity);
// Save changes in database
context.SaveChanges();
}
}
S'il vous plaît laissez-moi savoir si cela est utile
Selon documentation Microsoft :
l'approche en lecture-première nécessite une lecture supplémentaire de la base de données et peut entraîner un code plus complexe pour la gestion des conflits de simultanéité
Cependant, vous devez savoir que l'utilisation de la méthode Update sur DbContext marquera tous les champs comme modifiés et les intégrera tous dans la requête. Si vous souhaitez mettre à jour un sous-ensemble de champs, vous devez utiliser la méthode Attach, puis marquer le champ souhaité comme modifié manuellement.
context.Attach(person);
context.Entry(person).Property("Name").IsModified = true;
context.SaveChanges();
Microsoft Docs nous donne deux approches.
Recommandé HttpPost Modifier le code: Lire et mettre à jour
C’est la même chose que dans les versions précédentes d’Entity Framework. et c’est ce que Microsoft recommande pour nous.
Avantages
Modified
sur les champs modifiés lors de la saisie du formulaire.Alternative HttpPost Modifier le code: créer et joindre
une alternative consiste à attacher une entité créée par le classeur de modèle au contexte EF et à le marquer comme modifié.
Comme mentionné dans l'autre réponse, l'approche lecture-première nécessite une lecture supplémentaire de la base de données et peut entraîner un code plus complexe pour la gestion des conflits de simultanéité.