Je cherche à utiliser Entity Framework 6 pour un nouveau projet. Lorsque nous développons nos tables, nous ajoutons un compteur de mises à jour de type int, et lorsque nous effectuons une mise à jour, nous vérifions qu'il n'a pas été modifié et l'incrémente lors d'une mise à jour réussie. D'après ce que j'ai lu, je peux effectuer la vérification en ajoutant un attribut ConcurrencyCheck à la propriété du compteur de mise à jour, mais comment effectuer l'incrément en cas de mise à jour réussie? Ou devrais-je simplement utiliser une colonne Rowversion à la place?Entity Framework 6 Code First Concurrency
Répondre
This Microsoft blog post contient des liens vers un certain nombre de guides EF6 et MVC. Il y en a un en particulier, vous devriez vérifier - Handling Concurrency with the Entity Framework 6. Le guide utilise un projet ASP.Net MVC, mais les principes de la base de données devraient s'appliquer à presque tous les types de projets. En résumé, si vous utilisez un attribut ConcurrencyCheck
, vous n'avez pas besoin de mettre à jour vous-même un compteur, mais cela ajoute davantage de frais aux opérations de base de données de votre application car EF extrapolera toutes les requêtes SQL pour inclure la simultanéité vérifie les propriétés auxquelles vous avez appliqué l'attribut ConcurrencyCheck
. Si vous avez une très grande table (beaucoup de colonnes), cela peut ralentir les performances des applications. Le meilleur moyen serait d'utiliser l'attribut TimeStamp
sur une propriété array byte dans votre classe code-first (ou si vous utilisez Fluent API, vous définissez IsConcurrencyToken()
sur la propriété). Ensuite, s'il y a un conflit de concurrence, EF lancera un DbUpdateConcurrencyException
- c'est à vous de l'attraper et de le gérer en conséquence.
- 1. Code First Entity Framework
- 2. Entity Framework ObjectContext: Concurrency
- 3. EntityDataSource avec Code-First Entity Framework 4.1
- 4. Entity Framework Code-First est très lent
- 5. Entity Framework Code First + MySQL ... NullReferenceException
- 6. Comment utiliser Entity Framework code-first
- 7. Entity Framework 4.1 Code First Freeze
- 8. Entity Framework Code-First: Comment concevoir?
- 9. Entity Framework Optimistic Concurrency Exception Exception non
- 10. Optimiste dans concurrency ADO.NET Entity Framework
- 11. Entity Framework 6 - Erreur DbFunctions.AddHours
- 12. Entity Framework 6 + réseau
- 13. Code First Entity Framework interdit l'accès à la table
- 14. Entity Framework Code First - Définir les relations/clés
- 15. Entity Framework Code-First - Définition des relations avec MembershipUser
- 16. Entity Framework Code First: Comment mapper des champs privés?
- 17. Entity Framework Code First - Configuration dans un autre fichier
- 18. Désactivation de l'identité temporaire - Entity Framework 4.1 Code First
- 19. Entity Framework + Héritage multi-niveaux + Code EF first
- 20. Entity Framework 4.1 Code First Override Conventions Confusion
- 21. Code-First Entity Framework insertion de données avec ID personnalisé
- 22. Comment utiliser ENUMS dans Code First of Entity Framework 4.3 +?
- 23. Entity Framework Code First: mappage personnalisé à l'aide d'un attribut?
- 24. Entity Framework 4 & Code First CTP 5 - Clé manquante
- 25. Entity Framework 4 Code First et new() Opérateur
- 26. Entity Framework Code First Liaison de tables ensemble clé étrangère
- 27. Entity Framework Code First: Comment modéliser une relation client/adresse?
- 28. Entity Framework Code-First - Définir la clé pour cet EntityType
- 29. Code First Entity Framework 4: échec de l'authentification SQL
- 30. Entity Framework Code First 3 classes des propriétés identiques
Ainsi, l'ajout d'un attribut ConcurrencyCheck à une seule colonne devrait entraîner l'incrémentation de EF par la même colonne? Je suppose qu'une colonne ne provoquera pas la performance lente comme vous l'avez décrit. – ScottD
@ScottD oui, mais la concurrence ne sera vérifiée que pour cette colonne. Il est généralement préférable d'utiliser l'horodateur – rwisch45
@ rwisch45 Je dirais que cela dépend uniquement de votre cas d'utilisation. La gestion des versions de lignes peut conduire à une situation très frustrante dans laquelle vous ne pouvez pas faire la différence entre les écritures critiques et non critiques. Il est faux de dire qu'il est généralement préférable d'utiliser le versionnement des lignes plutôt que tout autre contexte sans contexte approprié. –