J'ai cherché cette erreur étrange pendant des heures mais je n'ai rien trouvé. J'ai une entité très simple:Entity Framework code d'abord: mise à jour SetInitializer throws exception
public class Company {
public Guid Id { get; set; }
public string Name { get; set; }
}
Et voici le contexte:
public class MyDBContext : DbContext {
public DbSet<Company> Companies { get; set; }
}
Lors de l'exécution de la première fois, tout fonctionne très bien. Mais, quand je change l'entité (par exemple, je mets l'attribut [Key] pour l'identification), j'obtiens le "modèle a changé" prévu ou quelque chose d'erreur. Donc, je l'entre dans le Global.asax application_start:
Database.SetInitializer<MyDBContext>
(new DropCreateDatabaseIfModelChanges<MyDBContext>());
C'est où je suis coincé. Il n'y a pas d'erreur de compilation, il compile sans erreurs/avertissements. Mais, lorsque j'exécute mon projet, j'obtiens l'erreur suivante:
Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails d'exception: System.TypeLoadException: GenericArguments[0], 'MyDB.Data.MyDBContext', on 'System.Data.Entity.IDatabaseInitializer1[TContext]' violates the constraint of type parameter 'TContext'
.
S'il vous plaît, quelqu'un a une idée? J'utilise Entity Framework 4.1 (CTP5)
J'ai finalement compris. Mon contexte de base de données était dans un projet de bibliothèque de classes, tandis que le Global.asax était bien sûr dans une application web MVC3. Déplacer la logique de base de données entière vers la même application Web MVC3 a résolu le problème. Alors pourquoi ça ne marche pas dans la bibliothèque de classe? – user825887
F * ck ceci, résolu après des heures. Il s'est avéré que la classe de bibliothèque utilisait 4.0.0 et l'application Web 4.0.1. Tirez-moi. – user825887
Monsieur, vous venez de me sauver des heures garanties de me taper la tête contre un bureau. Mettez votre réponse en place et je vais l'augmenter immédiatement. – Andrey