EF CodeFirst: DropCreateDatabaseIfModelChanges ne fonctionne pas
J'utilise le code suivant dans mon Global.asax:
DbDatabase.SetInitializer<MyDBContext>
(new DropCreateDatabaseIfModelChanges<MyDBContext>());
mais il ne semble pas fonctionner.
Bien que mon Modèle a changé et je suis en train d'utiliser l'un de la nouvelle table, il dit juste la table n'a pas pu être trouvé.
Invalid object name 'dbo.TableName'.
Si j'exécute ce cependant, il semble fonctionner, et la table est en cours de création:
DbDatabase.SetInitializer<MyDBContext>(new DropCreateDatabaseAlways<MyDBContext>());
Il n'mise à jour de ma base de données.
Qu'est-ce que je fais de mal?
Avez-vous modifier les conventions?
Non, je veux dire IncludeMetadataConvention. Avez-vous l'enlever? Avez-vous des EdmMetadata table dans votre base de données?
Avez-vous ajouter une table manuellement?
Il s'est avéré que les autorisations de l'utilisateur sur la base de données master. Bizarre que l'utilisation de DropCreateDatabaseAlways est n'a pas besoin d'autorisations sur la base de données master, où IfModelChanges.
Très intéressante. Je ne le savais pas. Poste en tant que réponse à votre question. Je vais upvote. Btw. veut-il dire qu'il SQL throws exception qui est avalé par EF?
Non, je veux dire IncludeMetadataConvention. Avez-vous l'enlever? Avez-vous des EdmMetadata table dans votre base de données?
Avez-vous ajouter une table manuellement?
Il s'est avéré que les autorisations de l'utilisateur sur la base de données master. Bizarre que l'utilisation de DropCreateDatabaseAlways est n'a pas besoin d'autorisations sur la base de données master, où IfModelChanges.
Très intéressante. Je ne le savais pas. Poste en tant que réponse à votre question. Je vais upvote. Btw. veut-il dire qu'il SQL throws exception qui est avalé par EF?
OriginalL'auteur reinder | 2011-03-21
Vous devez vous connecter pour publier un commentaire.
Pour ce que ça vaut, j'ai rencontré beaucoup de problèmes avec la les deux de la DropCreate stratégies parce que Cassini était toujours en cours après que j'ai fermé le navigateur. (J'ai eu le même problème avec IIS Express.) Parce que le serveur web local est toujours en cours d'exécution,
Application_Start
n'a pas le feu à nouveau, de sorte que l'initialisation j'ai mis il n'y a jamais eu d'exécution.J'ai résolu cela en permettant de Modifier et de Poursuivre:
Propriétés du projet > Web > Débogueurs > Permettre de Modifier et Continuer
Cela force le serveur web local pour fermer lorsque le navigateur se ferme.
si vous frapper de débogage ou d'exécuter sans débogage normalement, c'est l'action par défaut dans visual studio, la seule raison que je vois ce qui se passe est que si vous modifiez le code puis juste naviguer sur le site sans reconstruction
OriginalL'auteur Ryan Lundy
Il s'est avéré que les autorisations de l'utilisateur sur la base de données master. Bizarre que l'utilisation de DropCreateDatabaseAlways est n'a pas besoin d'autorisations sur la base de données master, où IfModelChanges.
OriginalL'auteur reinder
J'ai eu le même problème avec:
Dans mon cas, la base de données existait déjà quand je l'ai ajouté au-dessus de la ligne de code. J'ai laissé tomber la db et a couru mon programme de nouveau, et il a commencé à travailler comme prévu. Seul autre conflit pourrait avoir été la cause est que j'avais joué avec "Enable-Migrations" sur la base de données.
HTH
OriginalL'auteur Jeff Borden
Ce comportement est attendu dans le cas où vous avez supprimé IncludeMetadataConvention:
modelBuilder.Conventions.Remove<System.Data.Entity.Database.IncludeMetadataConvention>();
OriginalL'auteur Devart