Comment vérifier si le schéma de base de données correspond à l'Entité Cadre du schéma?
À ma surprise, à l'aide de la CreateDatabaseIfNotExists contexte de l'initialiseur, la ligne
context.Database.Initialize(true)
n'est pas lever une exception si le schéma ne correspond pas à mon code du premier schéma.
Est-il un moyen de valider si la base de données actuelle correspond à notre schéma avant, par exemple, nous essayons d'accéder à une entité, dont la table n'existe pas dans la base de données, et de plus, une exception est levée par EF?
il est maintenant github.com/reckface/EntityFramework.Verify via @reckface pour cette fin
Mieux vaut tard que jamais! Dommage que je ne pas utiliser EF plus 🙂
Mieux vaut tard que jamais! Dommage que je ne pas utiliser EF plus 🙂
OriginalL'auteur Eduardo Brites | 2012-10-26
Vous devez vous connecter pour publier un commentaire.
Vous pouvez appeler CompatibleWithModel pour déterminer si la base de données correspond au modèle. Si vous définissez le paramètre sur true, il va lever une exception si aucun modèle de données est trouvé dans la base de données.
J'ai vérifié EF internes et il semble que NotSupportedException va doit être jetée dans le cas d'une absence de métadonnées dans la base de données.
Comme une note, j'ai essayé de l'utiliser sur une base de données-première application, et il ne peut travailler qu'avec un Code-premières Bases de données. Merci à vous, si.
Code-premier signifie en fait 'code'. Vous ne pouvez pas aller de l'évolution de la DB manuellement, sauf si vous ajoutez une migration pour chaque changement, qui peut être manuel SQL ou d'un DBA fourni le script. Vous juste ne pouvez pas vous attendre à EF de comparer le réel en direct DB schéma avec le modèle.
Juste pour info, il semble s'être retiré en EF Core :\ quelqu'un sait-il d'un remplacement en EF?
OriginalL'auteur AxdorphCoder
EF ne traverse pas de vérifier le schéma de base de données avec le modèle à chaque fois que vous démarrez votre application. Au lieu de cela, il est à la recherche pour le modèle qui est enregistré dans la base de données (__MigrationsHistory table et avant de EdmMetadata) et de comparer ce modèle enregistré avec le modèle que vous utilisez. Si les modèles de correspondance de la base de données sera utilisée. Si les modèles ne correspondent pas, une exception sera levée. Si vous n'avez ni l' __MigrationHistory ni EdmMetadata table dans votre base de données EF supposons que vous utilisez la Base de données de première approche avec DbContext et votre base de données correspond au modèle. Si vous voulez comparer la base de données avec votre modèle vous pourriez dump Edmx pour votre modèle (en utilisant EdmxWriter.WriteEdmx) et utiliser Visual Studio et EF designer obtenir l'Edmx à partir de la Base de données et de comparer des trois laboratoires de pièces.
Si vous modifiez ni le modèle ni la base de données et qu'ils correspondaient avant, alors vous n'avez probablement pas besoin de le faire. Je pense que quelle que soit la technologie d'accès que vous utilisez ce problème existe et le processus de développement devrait s'occuper de cela. La redécouverte de la base de données lors de l'exécution semble être une bonne approche pour moi.
vous n';t semblent avoir expédié les produits! Le client installe le produit 1.0, puis vous le mettez à jour qui nécessite une DB changement. Client, puis installe le nouveau code, mais ne parvient pas (pour quelque raison que ce soit) pour mettre à jour correctement le schéma puis ils courent le produit et vous obtenez un méchant exception lorsque le code tente de lire à partir de l'colonnes manquantes. Il est donc préférable de vérifier d'abord, ou au moins tenter de validation de sorte que vous pouvez pop up un meilleur message d'erreur et puis quittez.
Si votre application se compose de plusieurs dll vérifiez-vous si ils existent tous à chaque fois avant de vous lancez votre application? Pour quelque raison que ce soit l'un d'entre eux est peut-être manquant lorsque vous déployez votre application et vous recevrez un méchant exception. Ce que vous décrivez est dans mon esprit une situation similaire, - vous n'avez pas à installer votre application. Une fois que l'application est installée correctement (c'est à dire toutes les dll sont en place et la base de données est mise à jour correctement) est le manque de vérification le problème? Pratique - comment voulez-vous gérer un tel contrôle? Que faire si un type de colonne a été changé? Longueur? Index? Nouvelle table?
OriginalL'auteur Pawel