158 votes

Comment mettre à jour l'enregistrement à l'aide du noyau de la structure d'entité?

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é?

  1. Retrive la rangée du tableau, apporte les modifications et enregistre
  2. Utiliser le mot clé Update dans un contexte de base de données et gérer une exception pour un élément inexistant

Quelles sont les fonctionnalités améliorées que nous pouvons utiliser sur EF6?

184voto

H. Herzl Points 836

Pour mettre à jour une entité avec Entity Framework Core, c'est le processus logique:

  1. Créer une instance pour DbContext classe
  2. Récupérer entité par clé
  3. Faire des modifications sur les propriétés de l'entité
  4. Enregistrer les modifications

Update() méthode de DbContext:

Commence le suivi de l'entité donnée dans la modification de l'état tel qu'il sera mis à jour dans la base de données lors de l' SaveChanges() est appelé.

Méthode de mise à jour n'a pas d'enregistrer les modifications dans la base de données; au lieu de cela, il définit les états pour les entrées en instance DbContext.

Donc, Nous pouvons invoquer Update() méthode avant d'enregistrer les modifications dans la base de données.

Je vais assumer certaines définitions d'objet pour répondre à votre question:

  1. Nom de base de données est en Magasin

  2. Nom de la Table est Produit

Produit définition de la classe:

public class Product
{
    public int? ProductID { get; set; }

    public string ProductName { get; set; }

    public string Description { get; set; }

    public decimal? UnitPrice { get; set; }
}

DbContext définition de la classe:

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);
    }
}

La logique de mise à jour de 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

103voto

Ehsan Mirsaeedi Points 128

Selon Microsoft docs:

la lecture de la première approche nécessite une lecture de base de données, et peut conduire à un code plus complexe pour le traitement de la simultanéité des conflits

Cependant, vous devez savoir que l'utilisation de méthode de mise à Jour sur DbContext va marquer tous les champs modifiés et tous les inclure dans la requête. Si vous voulez mettre à jour un sous-ensemble de domaines, vous devez utiliser la méthode Attach puis marquer le champ souhaité que modifiée manuellement.

context.Attach(person);
context.Entry(person).Property("Name").IsModified = true;
context.SaveChanges();

11voto

Nips Points 772

Microsoft Docs nous donne deux approches.

Recommandé HttpPost Modifier le code: Lecture et mise à jour

C'est la même vieille manière dont nous l'habitude de faire dans les versions précédentes de l'Entity Framework. et c'est ce que Microsoft recommande pour nous.

Avantages

  • Empêche overposting
  • EFs changement automatique de suivi définit l' Modified drapeau sur les champs qui sont modifiés par le formulaire de saisie.

Alternative HttpPost Modifier le code: Créer et joindre

une alternative est d'attacher une entité créée par le modèle de liaison de l'EF contexte et le marquer comme modifié.

Comme mentionné dans la réponse à la lecture de la première approche nécessite une lecture de base de données, et peut conduire à un code plus complexe pour la manipulation des conflits de concurrence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X