Est-ce que quelqu'un pourrait me guider sur la façon de mettre en œuvre une politique de réessayer avec EF à SQL Azure, s'il vous plaît.Entity Framework - Stratégie de réessai SQL Azure
Répondre
Ce fil de discussion Azure contient des liens vers de bonnes ressources couvrant ce sujet. Il ne semble pas y avoir encore quelque chose d'officiel. Mais il y a des projets open source qui vous donnent un bon début.
De la réponse:
Personnellement, je ne pas utiliser la bibliothèque le blog mentionne. Au lieu de cela, j'ai été en mesure de sortir avec une simple boucle WHILE avec un TRY/CATCH qui a surveillé les numéros d'erreur SQL EXCEPTION spécifiques qui étaient sûrs de réessayer. Il y a aussi un compteur qui l'empêche fondamentalement de «réessayer» pour toujours.
J'utilise le Transiet Fault Handling Framework, fourni dans la mesure d'une meilleure solution par l'équipe d'EF. Ajoutez le binaire ou le projet dans le lien ci-dessus à votre solution et ajoutez la référence à votre projet.
- instancier une politique de nouvelle tentative avec les paramètres appropriés:
var retryPolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(
10,
TimeSpan.FromSeconds(0.5),
TimeSpan.FromSeconds(2)
) { FastFirstRetry = true };
- Utilisez votre objet de stratégie de nouvelle tentative pour tout travail atomique sur la
context
.
using(var context = new ...)
{
...//Maybe you do something to the database...
retryPolicy.ExecuteAction(() => context.SaveChanges());
}
+1 Je sais que cette question est assez ancienne maintenant, mais il est bon de mentionner le cadre de traitement des fautes transitoires. Je l'utilise dans la production depuis un certain temps et cela fonctionne très bien pour moi. –
Vous devez faire très attention en utilisant cette technique si vous faites SaveChanges() dans un TransactionScope, car dans ce cas, EF n'enveloppe pas le SaveChanges dans un bloc BEGIN/COMMIT, en s'appuyant sur BEGIN/COMMIT de la portée de transaction essayez-le avec le profileur SQLServer pour voir ce que je veux dire). Donc, si le SaveChanges() a effectué 5 insertions et une a échoué, une nouvelle tentative pourrait ré-insérer le 4 qui n'a pas eu de problèmes. C'est probablement pourquoi la résilience de connexion EF 6 n'autorise pas les transactions définies par l'utilisateur: [voir] (http://msdn.microsoft.com/fr-fr/data/dn307226) – JohnB
Windows Server AppFabric équipe de conseillers à la clientèle ont fourni des indications assez détaillées autour de this blog post retries. Fondamentalement, ils ont un certain nombre de façons différentes d'utiliser le cadre de gestion des erreurs de transit (qui a été remplacé depuis par le Transient Fault Handling Application Block, qui est similaire) afin de fournir des tentatives.
Le problème avec l'utilisation de la bibliothèque Transient Fault Handling selon la plupart de la documentation est qu'il vous oblige à emballer tous les appels de base de données dans votre application.
Si vous utilisez Entity Framework 6 (actuellement en alpha) alors il y a un nouveau soutien en construit pour relances transitoires avec SQL Azure Database (avec un peu de configuration): voici le link
Je Nous avons créé une bibliothèque qui vous permet de configurer Entity Framework pour réessayer en utilisant le bloc Fault Handling sans avoir besoin de changer tous les appels de base de données. En général, vous n'aurez qu'à modifier votre fichier de configuration et éventuellement une ou deux lignes de code.
Cela vous permet de l'utiliser pour Entity Framework ou LINQ Pour Sql, voici le link
Entity Framework 6 a ajouté la résilience de connexion comme une nouvelle fonction pour aider à résoudre ce, citant Microsoft: "active la récupération à partir des échecs de connexion transitoires ". Voici le Connection Resiliency Spec for EF6 si vous voulez en savoir plus.
Est-il implémenté par défaut? Ou devons-nous l'activer explicitement? – Zapnologica
- 1. Caching Entity Framework aboutit à Azure AppFabric
- 2. Entity Framework - SQL dynamique
- 3. SQL, MVC, Entity Framework
- 4. Utilisation d'Entity Framework avec SQL Azure - Fiabilité
- 5. Dans Entity Framework Code First (DbContext), comment gérer les erreurs et les renvois de connexion Azure?
- 6. Dynamic SQL Query Entity Framework
- 7. /Convertir SQL Entity Framework/LINQ
- 8. LINQ à SQL vs Entity Framework pour une application avec une future version SQL Azure
- 9. Erreur Entity Framework lorsque SetInitializer a passé une stratégie
- 10. Stratégie de basculement/sauvegarde SQL Azure pour l'application Web
- 11. Vues SQL avec Entity Framework
- 12. Entity Framework SQL Exécution de requête
- 13. Entity-Framework Délai de commande SQL
- 14. Entity Framework Avec SQL Azure sur un ralentissement des performances de tcp net
- 15. Entity Framework 4, SQL Azure, une base de données par client ou préfixe les tables?
- 16. SQL Azure réessaie-t-il la structure logique TransientFaultHandling est-il livré avec des stratégies de réessai par défaut?
- 17. SharePoint Online dans Office 365 avec SQL Azure et Entity Framework
- 18. Entity Framework, aucun serveur SQL, que faire?
- 19. Garder l'histoire dans Entity Framework/Sql Server
- 20. Débogage des instructions SQL Entity Framework
- 21. Entity Framework + Sql Anywhere 11 + Procédures stockées
- 22. Entity Framework et SQL Server Synonymes
- 23. Entity Framework LINQ à la relation SQL
- 24. Compatibilité ascendante SQL Server dans Entity Framework?
- 25. convertir une requête SQL pour Entity Framework
- 26. Optimisation des performances SQL (Entity Framework)
- 27. Entity Framework context.SaveChanges() lent - SQL Profiler inclus
- 28. Sql Server (Entity Framework): created_at, updated_at Colonnes
- 29. Entity Framework perd Sql DateTime precision
- 30. Entity Framework Query pour Complex Sql
Merci Vyrotek, seriez-vous en mesure de partager votre boucle while try/catch s'il vous plaît? –