Utiliser LINQ pour mettre à jour chaque champ dans la ligne SQL sans déclarer spécifiquement chaque champ?

Je voulais juste savoir s'il y avait un moyen de mettre à jour chaque champ / propriété dans une ligne SQL sans avoir à déclarer explicitement "context.FieldName = model.FieldName" pour chaque champ.

Ce que j'ai essayé de faire était:

  1. Transmettez l'object de model mis à jour à la méthode.
  2. Récupère l'object DTO du context db en fonction de l'ID de l'object model
  3. Si non null, en utilisant AutoMapper, convertissez l'object model en un object DTO
  4. Maintenant, définissez l'object DTO d'origine sur l'object DTO nouvellement mappé
  5. Mettre à jour la database ( c'est là que ça échoue )
  6. Enregistrer le context

Mais si je place explicitement chaque champ DTO = dans son champ de model correspondant, cela fonctionne (évidemment). Mais en raison des changements fréquents de database, et de la quantité de champs SQL, je voudrais éviter de mettre à jour manuellement chaque champ et de le maintenir chaque fois que la database est modifiée.

Si vous utilisez la dernière version d'automapper, vous pouvez faire quelque chose comme ceci:

 public void UpdateCustomer(Customer customer) { var customerTopdate=dbContext.Customers.Where(c=>c.Id=customer.Id); var result=AutoMapper.Map<Customer>(customer,customerTopdate); dbContext.SaveChanges(); } 

Vous pouvez utiliser l' Entity State de l' entity pour votre entity pour la update à update ainsi que pour la delete et l' insert .

Mettre à jour

 dbContext.Entry(yourEntity).State = EntityState.Modified; dbContext.SaveChanges(); 

Insérer

 dbContext.Entry(yourEntity).State = EntityState.Added; dbContext.SaveChanges(); 

Effacer

 dbContext.Entry(yourEntity).State = EntityState.Deleted; dbContext.SaveChanges(); 

Et n'oubliez pas d'appeler SaveChanges() à la fin de chaque opération.

Pour plus d'informations, s'il vous plaît visitez

États d'entité et SaveChanges

Merci à tous ceux qui ont répondu. Voici comment je l'ai fait fonctionner en utilisant la dernière version d'AutoMapper:

 public void UpdateCustomer(Customer customer) { var customerTopdate=dbContext.Customers.Where(c=>c.Id=customer.Id); if (customerTopdate != null { _mapper.Map(customer,customerTopdate); _context.SaveChanges(); } }