Le nom EntityContainer doit être unique. Un EntityContainer avec le nom 'Entities' est déjà défini

.net c# entity-framework exception-handling visual-studio

Question

Pour un peu de fond:

J'ai un projet DLL avec la structure suivante:

Rivworks.Model (project)  
  \Negotiation (folder)  
      Model.edmx (model from DB #1)  
  \NegotiationAutos (folder)  
      Model.edmx (model from DB #2)  

J'ai déplacé les chaînes de connexion de app.config de ce projet vers le fichier web.config. Ils ne sont pas dans la section ConnectionString. J'ai plutôt une classe statique qui consomme une partie du web.config et les expose à mon application en tant qu'AppSettings.

<FeedAutosEntities_connString>metadata=res://*/;provider=System.Data.SqlClient;provider connection string='Data Source=db4;Initial Catalog=RivFeeds;Persist Security Info=True;User ID=****;Password=&quot;****&quot;;MultipleActiveResultSets=True'</FeedAutosEntities_connString>
<RivWorkEntities_connString>metadata=res://*/NegotiationAutos.NegotiationAutos.csdl|res://*/NegotiationAutos.NegotiationAutos.ssdl|res://*/NegotiationAutos.NegotiationAutos.msl;provider=System.Data.SqlClient;provider connection string='Data Source=db2;Initial Catalog=RivFramework_Dev;Persist Security Info=True;User ID=****;Password=&quot;****&quot;;MultipleActiveResultSets=True'</RivWorkEntities_connString>

J'ai 2 classes, une pour chaque contexte et elles ressemblent à ceci:

namespace RivWorks.Model
{
    public class RivWorksStore
    {
        private RivWorks.Model.Negotiation.Entities _dbNegotiation;

        public RivWorksStore(string connectionString, string metadata, string provider)
        {
            EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
            entityBuilder.ConnectionString = connectionString;
            entityBuilder.Metadata = "res://*/";    // metadata;
            //entityBuilder.Provider = provider;
            _dbNegotiation = new RivWorks.Model.Negotiation.Entities(entityBuilder.ConnectionString);
        }

        public RivWorks.Model.Negotiation.Entities NegotiationEntities()
        {
            return _dbNegotiation;
        }
    }
}

namespace RivWorks.Model
{
    public class FeedStoreReadOnly
    {
        private RivWorks.Model.NegotiationAutos.Entities _dbFeed;

        public FeedStoreReadOnly(string connectionString, string metadata, string provider)
        {
            EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
            entityBuilder.ConnectionString = connectionString;
            entityBuilder.Metadata = "res://*/";    // metadata;
            //entityBuilder.Provider = provider;
            _dbFeed = new RivWorks.Model.NegotiationAutos.Entities(entityBuilder.ConnectionString);
        }

        public RivWorks.Model.NegotiationAutos.Entities ReadOnlyEntities()
        {
            return _dbFeed;
        }
    }
}

Vous noterez que MetaData est en cours de réécriture en une version courte.

Lorsque je commente cette ligne dans chaque classe, j'obtiens cette erreur:

Impossible de charger la ressource de métadonnées spécifiée.

Lorsque je laisse cette ligne dans chaque classe, j'obtiens cette erreur:

Le schéma spécifié n'est pas valide. Les erreurs:

Negotiation.Model.csdl (3,4): erreur 0019: le nom de EntityContainer doit être unique. Un EntityContainer avec le nom 'Entities' est déjà défini.

Je sais que c'est quelque chose de simple, quelque chose d'évident. Toutes les suggestions sont les bienvenues ...

Réponse acceptée

Vos deux fichiers EDMX ont probablement le même nom de conteneur d’entités. Vous devez changer (au moins) l'un d'entre eux.

Dans le concepteur d'interface graphique, ouvrez le navigateur de modèle. Recherchez un noeud qui dit "EntityContainer: Entities". Cliquez dessus. Dans Propriétés, remplacez Name par quelque chose d'autre. Sauvegarder et reconstruire.


Réponse populaire

Détournant ceci, puisqu'il s'agit du premier résultat de Google pour le message d'erreur.

Si quelqu'un d'autre le rencontre alors que vous utilisez un seul modèle / contexte: J'ai rencontré ce problème une fois, car l'assembly contenant le modèle / contexte a été renommé et une copie portant le nom précédent est restée dans le répertoire bin de l'application. La solution consistait à supprimer l'ancien fichier d'assemblage.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow