web-dev-qa-db-fra.com

Entity Framework - Déjà défini

J'ai un problème avec un fichier EDMX que je n'ai jamais rencontré auparavant. Apparemment au hasard lorsque le site est en cours d'exécution ou que je suis en train de déboguer, l'EF va exploser et se plaindre que tout est redéfini. Je dois redémarrer le pool d'applications et reconnecter le débogueur à chaque fois, puis recommencer à partir de l'endroit où je me suis arrêté, après quoi cela fonctionnera jusqu'à la prochaine fois qu'il bombardera.

J'ai déjà recréé l'EDMX sous un nom différent, d'où MyAppEntities * 1 *

L'erreur est:

Error: Schema specified is not valid. Errors: App_Code.Fck.csdl(3,4) : 
error 0019: The EntityContainer name must be unique. An EntityContainer with the name 'MyAppEntities1' is already defined. App_Code.Fck.csdl(69,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.AdSection' was already defined. App_Code.Fck.csdl(79,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.AgeRating' was already defined. App_Code.Fck.csdl(89,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Comment' was already defined. App_Code.Fck.csdl(101,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.ContentImage' was already defined. App_Code.Fck.csdl(115,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.ContentVideo' was already defined. App_Code.Fck.csdl(126,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FeaturePlan' was already defined. App_Code.Fck.csdl(142,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Flick' was already defined. App_Code.Fck.csdl(165,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Gallery' was already defined. App_Code.Fck.csdl(184,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Genre' was already defined. App_Code.Fck.csdl(197,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Like' was already defined. App_Code.Fck.csdl(208,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Meta' was already defined. App_Code.Fck.csdl(216,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.Payment' was already defined. App_Code.Fck.csdl(236,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.StatusUpdate' was already defined. App_Code.Fck.csdl(246,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.UserProfile' was already defined. App_Code.Fck.csdl(277,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_FeaturePlans_AdSections' was already defined. App_Code.Fck.csdl(289,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Flicks_AgeRatings' was already defined. App_Code.Fck.csdl(301,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Comments_Users' was already defined. App_Code.Fck.csdl(313,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Payments_FeaturePlans' was already defined. App_Code.Fck.csdl(325,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Flicks_Users' was already defined. App_Code.Fck.csdl(337,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Genres_Genres' was already defined. App_Code.Fck.csdl(349,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Likes_Users' was already defined. App_Code.Fck.csdl(361,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Payments_Users' was already defined. App_Code.Fck.csdl(373,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_StatusUpdates_Users' was already defined. App_Code.Fck.csdl(385,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FlickGenres' was already defined. App_Code.Fck.csdl(389,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.User' was already defined. App_Code.Fck.csdl(401,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_Users_be_Users' was already defined. App_Code.Fck.csdl(413,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.ContentImageSet' was already defined. App_Code.Fck.csdl(426,4) : 
error 0019: Each type name in a schema must be unique. Type name 'FckModel.FK_ContentImages_ContentImageSets' was already defined.
31
Echilon

Vous pouvez modifier le nom d'assemblage du projet contenant le modèle.

La référence à l'assembly d'origine se trouvait toujours dans l'application cliente.

Application Web ASP.net: - Supprimez manuellement les fichiers dll et pdb.

Site Web ASP.net: - Effectuez une réinitialisation IIS, puis supprimez les fichiers temporaires asp.net dans le dossier C:\windows\Microsoft.net\votre version de framework\temp fichiers asp.net \

52
Damith

Pour ceux dont le problème n'est pas encore résolu, essayez de modifier la chaîne de connexion dans web.config.

Dans mon cas, j'ai changé connectionString 

De  

<add name="StudentRegistrationDB" connectionString="metadata=res://*/App_Code.EFDataModel.StudentReg.csdl|res://*/App_Code.EFDataModel.StudentReg.ssdl|res://*/App_Code.EFDataModel.StudentReg.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=StudentRegistration;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

À:

 <add name="StudentRegistrationDB" connectionString="metadata=res://App_Code.EFDataModel2.StudentRegDB.csdl|res://App_Code.EFDataModel2.StudentRegDB.ssdl|res://App_Code.EFDataModel2.StudentRegDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=StudentRegistration;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

notez que «l'étoile» dans les métadonnées a été supprimée, de sorte que les métadonnées sont dirigées vers l'emplacement absolu. En raison de sa "star", EF cherche partout. On peut donc rencontrer des doublons

Remarque: Il s'agit d'une solution simple, ce qui signifie que vous n'effacez pas les données en double, ce qui n'est pas une bonne idée. Le meilleur moyen est de supprimer les fichiers en double .pdb/.dll comme suggéré par les réponses précédentes.

4
Ganesh Vellanki

J'ai eu la même erreur. C'est un problème concernant les dlls, dans mon cas, il s'agissait d'une dll dupliquée.

4
Lücks

J'ai eu le même problème avec une solution différente, j'ai deux projets en utilisant une structure d'entité, avec des modèles de la même base de données avec le même nom, toutes les tables qui avaient été ajoutées sur les deux modèles où le message d'exception interne, la solution était de renommer l'un des modèles

3
rafael

Je viens d'avoir ce même problème. Les fichiers générés par Entity FrameworkNE PEUVENT PASêtre dans le dossier App_Code. Je veux dire les fichiers EDMX.

Je parie que vous avez eu une erreur qui vous empêchait de référencer des fichiers, vous avez donc coché la propriété de Content to Compile. Cela a résolu l'erreur VS, mais créé deux instances: une instance précompilée et une compilation compilée.

La solution consiste à le garder en dehors du dossier App_code car il s'agit d'un dossier spécial réservé au code.

2
Gumowy Kaczak

J'ai rencontré ce problème alors que je travaillais sur un processus permettant aux assemblages de sous-applications d'être chargés de manière dynamique sans nécessiter le redémarrage de l'application entière. J'utilise EF 5.0 avec DbContext. Ma solution de contournement était de:

  1. Modifiez le nom du conteneur d'entité afin qu'il reflète la version de l'assembly, par exemple. CustomerEntities_1_0_7_0 et enregistrez l'edmx.
  2. Modifiez manuellement le contexte pour supprimer le suffixe de version:

    public partial class CustomersEntities : DbContext
    {
    public CustomersEntities() : base("name=CustomersEntities")
    
  3. Modifiez manuellement app.config de la même manière. 

2
johndsamuels

Dans mon cas, la suppression du modèle et sa création sous un nouveau nom ont résolu ce problème.

1
Yasser Amer

Après avoir creusé pendant 2 jours, j'ai finalement trouvé la cause du problème. J'ai eu 2 dll (application de base de données) qui pointant vers la même base de données cadre d'entité dans le même projet. En bref, il y avait des dll en double pour une base de données. Après avoir supprimé les dll non pertinentes, cela a bien fonctionné. 

0
Umesh Yeware