2009-11-29 8 views
0

Quelle est la meilleure approche pour gérer les problèmes de simultanéité des données dans une application à 3 couches (WCF + LinqToSql ou EF) avec des entités détachées ou des DTO?Meilleure approche pour gérer la simultanéité des données dans une application à 3 niveaux

Merci.

+0

A quoi faites-vous exactement référence par "Concurrence de données", synchronisation de threads ou concision de données? –

+0

Je veux dire la concordance des données, je veux trouver la meilleure approche pour empêcher les données déjà mises à jour par quelqu'un mis à jour par un autre utilisateur –

Répondre

0

Incluez toutes les valeurs modifiées dans votre clause where. Si aucune ligne n'est mise à jour, vous savez que vos données sont obsolètes et vous pouvez à ce moment informer l'utilisateur et lui demander quelle action entreprendre.

+0

Fonctionne-t-elle également avec les DTO qui ne contiennent pas tous les champs Entity mais au moins ID? –

+0

Oui - les valeurs que vous modifiez sont les seules qui vous préoccupent. –

0

Ceci est intégré dans LINQ to SQL et EF avec la propriété UpdateCheck de l'attribut Column. Mon option serait d'aller avec LINQ to SQL avec des entités POCO détachées tant que vous ne voulez vraiment travailler qu'avec MS SQL SERVER et que vous n'avez pas besoin de base de données compliquée pour les mappages d'entités.

Dans ce cas, j'utiliserais un seul champ de simultanéité dans chacune de vos tables et j'effectuerais une vérification de simultanéité uniquement sur ce champ. Un champ entier est correct et il suffit de l'incrémenter à chaque mise à jour.

Voir ici pour le contrôle des accès simultanés à l'aide de LINQ to SQL.

Concurrency with LINQ to SQL

pensé que ce serait pratique aussi:

LINQ to SQL Optimistic Concurrency Overview

P.S Ceci est tout en supposant que votre solution va être fine en utilisant l'accès concurrentiel optimiste. Si vous êtes dans un serveur à charge élevée où les données changent beaucoup, une solution d'accès simultané plus pessimiste peut s'avérer nécessaire.

1

Si vous ne transmettez pas toutes vos valeurs à l'aide de WCF, vous pouvez introduire un champ d'horodatage (rowversion) dans votre table. Cette valeur serait incluse en tant que propriété sur votre entité et votre DTO. En utilisant LINQ to SQL, vous avez la possibilité d'utiliser o ptimistic concurrency vérification, il est possible de spécifier la nouvelle propriété timestamp au lieu de comparer toutes les valeurs

Questions connexes