Entity Framework Code First est-il un peu vide de sens / inutile dans la production et quelle est une bonne stratégie EF pour la production?


29

J'ai programmé récemment avec Entity Framework 4.1 Code First et je l'adore pour le développement, mais avec seulement un plan final et une liste de fonctionnalités changeant rapidement, je modifie constamment la classe / base de données pour répondre aux besoins des applications.

En cours de développement, il n'y a pas de données en direct et je peux facilement supprimer toute la base de données afin qu'elle soit recréée avec le nouveau schéma cependant, évidemment, en direct - c'est très mauvais!

Les seules solutions que je peux voir sont soit de supprimer la table de métadonnées et de maintenir manuellement la base de données synchronisée, soit de supprimer et de réamorcer.

Personnellement, je préfère la première méthode car je pense qu'il sera beaucoup plus facile d'ajouter une colonne / table que de recréer et de migrer des données, mais, sauf si j'ai oublié quelque chose, cela s'éloigne complètement de Code First.

La question est donc vraiment la suivante: Code First concerne-t-il uniquement le développement initial et quelle est la bonne stratégie de gestion des FE pour un environnement de production?


Réponses:


15

Mon opinion est que la création de base de données automatique de code first est uniquement pour le développement. J'ai répondu à des questions similaires sur Stack Overflow où j'ai décrit à la fois comment mettre à niveau la base de données et pourquoi les fonctionnalités automatiques sont-elles mauvaises en production:

La mise à niveau de la base de données est une tâche semi-manuelle. Il ne devrait pas y avoir de magie automatique non testée - de plus, EF 4.1 ne dispose actuellement d'aucune magie de ce type (il n'y a que quelques présentations sur les fonctionnalités sur lesquelles l'équipe ADO.NET travaille).

Vous pouvez également vérifier cette question pour mieux comprendre comment les sites Web sont mis à niveau.


Bonjour encore! -vous êtes rapide sur les questions EF! :) ... Je ne sais pas où je serais sans toi!
wilhil

Quelques mois plus tard et mon programme est presque terminé ... Je marque cela comme une réponse, mais je me demandais si quelque chose a changé / y a-t-il des ressources qui peuvent aider?
wilhil

2
Le premier aperçu public de "Migrations" a été publié. blogs.msdn.com/b/adonet/archive/2011/07/27/…
Ladislav Mrnka

Merci, en regardant ça maintenant! J'ai adoré développer avec Code First, mais je suis tellement nerveux / inquiet de changer plus tard!
wilhil

Comment gérez-vous le cas où des StoredProcs ou des vues sont créés directement dans la base de données à d'autres fins, par exemple des rapports qui ne sont pas utilisés par l'application. Nous aurions besoin de savoir quels SP sont affectés par un changement de schéma dans le code en premier.
softveda

5

Gérez les scripts de mise à niveau .

Dans la base de données elle-même, conservez une table dans laquelle un enregistrement est conservé avec la version du schéma.

Lorsque vous démarrez l'application, il détecte la version par rapport à la version censée être utilisée par les binaires. S'il diffère, il exécute (ou demande à l'utilisateur) les scripts de mise à niveau.

N'oubliez pas de sauvegarder d'abord la base de données.


Étape suivante: vous êtes viré;) Les mises à jour de la base de données ne devraient pas s'ouvrir automatiquement sans une sauvegarde préalable - et éventuellement en temps d'arrêt, pas lorsqu'un UTILISATEUR exécute une version plus récente. Votre approche est parfaite - pour arrêter des déploiements plus importants avec des tonnes d'erreurs.
TomTom

@TomTom: cela dépend. Nous exécutons sans problème une application DB depuis plusieurs années, ce qui fait exactement cela: des changements de schéma automatiques pour une nouvelle version, effectués par l'application lorsqu'elle détecte une version trop ancienne. Les sauvegardes sont effectuées quotidiennement non plus, et nous conservons toutes les modifications de schéma rétrocompatibles (uniquement en ajoutant des champs et des tables, sans jamais en supprimer). Je reconnais que les mesures que vous avez mentionnées sont importantes lorsque les modifications ne sont pas rétrocompatibles, et vous ne pouvez pas garantir que toutes les applications clientes seront mises à jour simultanément (par exemple, pour les grandes bases de données d'entreprise).
Doc Brown

En plus si les changements ne sont pas anodins. Essayez de changer un champ dans une table de 2 To (et oui, je m'en occupe - et ce n'est même pas un entrepôt de données). Vous vous êtes mis dans un scénario où vous accumulez des dettes techniques parce que vous ne pouvez AJOUTER que des champs, jamais nettoyer.
TomTom

2

La question est en quelque sorte imparfaite en ce qu'elle établit des connexions entre le modèle de programmation et l'environnement d'exécution là où il n'y en a pas.

Le code d'abord est principalement un pilote de vitesse de développement et n'est pas vraiment connecté au système d'exécution.

En production, vous aurez correctement un paramètre de configuration qui refuse au runtime la possibilité de supprimer / mettre à jour le modèle db.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.