Le EntityContainer nom doit être unique. Un EntityContainer avec le nom "Entités" est déjà défini
Pour un peu de contexte:
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 à partir de ce projet est d'application.config pour le web.fichier de configuration. Ils sont pas dans la propriété ConnectionString section. Au contraire, j'ai une classe statique qui consomme une partie de la web.config et les expose à l'une de mes applications que AppSettings.[settingName].
<FeedAutosEntities_connString>metadata=res://*/;provider=System.Data.SqlClient;provider connection string='Data Source=db4;Initial Catalog=RivFeeds;Persist Security Info=True;User ID=****;Password="****";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="****";MultipleActiveResultSets=True'</RivWorkEntities_connString>
J'ai 2 classes, une pour chaque Contexte et ils 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 remarquerez que les Métadonnées est en train d'être réécrit pour la version courte.
Quand je commente la ligne de production dans chaque classe, j'obtiens cette erreur:
Impossible de charger les métadonnées définies ressource.
Quand je quitte cette ligne dans chaque classe, j'obtiens cette erreur:
Schéma spécifié n'est pas valide. Erreurs:
De négociation.De modèle.csdl(3,4) : erreur 0019: Le EntityContainer nom doit être unique. Un EntityContainer avec le nom "Entités" est déjà défini.
Je sais que c'est quelque chose de simple, quelque chose d'évident. Toutes les suggestions de bienvenue...
Vous devez vous connecter pour publier un commentaire.
Vos deux EDMX fichiers ont probablement la même entité nom du conteneur. Vous avez besoin de changer (au moins) l'un d'eux.
Dans le GUI designer, ouvrez l'explorateur de modèles. Recherchez un nœud qui dit "EntityContainer: les Entités". Cliquez sur elle. Dans la fenêtre Propriétés, modifiez
Name
à autre chose. Sauver et reconstruire.Détournement de cela, car il est à la tête des résultats sur Google pour le message d'erreur.
Au cas où quelqu'un d'autre rencontre ce en n'utilisant qu'un seul modèle/contexte: une fois, j'ai rencontré ce problème, car l'assembly contenant le modèle/contexte a été renommé et une copie avec le nom précédent est resté dans le répertoire bin de l'application. La solution a été de supprimer l'ancien fichier d'assemblage.
J'ai eu le problème aussi, mais ma solution a été de nettoyer le répertoire bin et ensuite supprimer la chaîne de connexion avec l'entité nom de conteneur. Ensuite, j'ai pu renommer mes entités et de remettre la chaîne de connexion.
J'ai renommé mon projet, mais l'ancien fichier était toujours dans le dossier bin. J'ai juste eu à supprimer l'ancienne DLL dans le dossier bin.
J'ai trouvé un moyen pour enregistrer plusieurs conteneurs avec le même nom (namespaces bien sûr).
Dans EF5 et VS2012 vous pouvez définir trois différents espaces de noms. D'abord, vous pouvez cliquer sur le fichier edmx dans la solution du navigateur et dans les propriétés de windows, vous pouvez définir la "un Outil Personnalisé de l'espace de Noms", vous pouvez cliquer sur le *.Contexte.tt le fichier ci-dessous à droite de l'edmx et définir un autre espace de noms là, et, finalement, grâce à un plomb de M. Stuntz génial réponse, j'ai réalisé que par l'ouverture du fichier edmx et en cliquant dans l'espace blanc, vous obtenez un autre espace de noms de domaine en vertu de Schéma dans la fenêtre propriétés.
Pense que nous sommes fait, pas tout à fait, je sais que vous pouvez voir le Nom du Conteneur d'entités champ et va essayer de changer le nom, mais qui ne semble pas fonctionner, vous obtenez un peu d'erreur qui s'affiche. S'assurer que tous vos edmx fichiers d'un espace de noms là. (J'ai assuré, j'ai eu un espace de noms unique à tous les trois endroits)
Ensuite, allez à votre Modèle de Navigateur et cliquez droit sur EntityContainer: Entité pour aller dans propriétés et modifiez le nom de votre conteneur(s). À partir de cette fenêtre avec l'espace de noms défini partout j'ai été en mesure d'obtenir des contextes multiples avec le même nom. J'ai été traiter avec des choses comme blahcontext et blahcontextcontainer tout d'un coup, même s'ils sont dans des dossiers différents.
Quand vous voyez que c'est un espace de noms problème. Ou l'absence de.
Model.tt
fichier et de modifier l'espace de noms là. Je ne suis pas sûr que le fait de changer le réel edmx espace de noms change quoi que ce soit mais...Model.cs
classe générée. Si je change l'espace de noms avec un clic gauche dans l'espace blanc aussi, je ne reçois rien, mais laModel.cs
classe. NgngngDans mon cas, le problème a été causé par ma chaîne de connexion dans le Web.config d'être nommé à la même chose que mon entités de la classe container.
Changement
à
et de régénérer la classe de conteneur en cliquant-droit sur ConflictingNameModel.Contexte.tt dans l'Explorateur de solutions et en cliquant sur "Exécuter l'Outil Personnalisé".
Je viens de tomber sur cette. Il ressemble en quelque sorte Entity Framework obtenu dans un mauvais état en termes de tableaux, il a estimé nécessaire d'ajouter.
Normalement EF ne reconnaîtra pas qu'un nouveau tableau est créé jusqu'à ce que vous mettre la ligne
à l'intérieur de votre classe de contexte.
Cependant, EF en quelque sorte obtenu dans un mauvais état où la simple présence de la Nouvelletable classe dans ma solution a été de déclenchement à penser qu'il est nécessaire de générer la table. Donc, le temps que la ligne ci-dessus dans le contexte déclenchée pour créer un Nouvelletable table, il a déjà pensé qu'il avait fait, d'où l'erreur sur les entités en double.
J'ai juste enlevé le Nouvelletable classe de ma solution, a commenté les choses de sorte qu'il serait de compiler à nouveau (heureusement il n'y avait pas trop de ce), puis ajouter une nouvelle migration pour s'assurer qu'il était vide, comme il se devait. Ensuite, une fois que les choses sont de retour dans un plus prévisible de l'état, j'ai rajouté le Nouvelletable classe dans la solution et l'ajout de la migration a bien fonctionné.
Si vous utilisez un déploiement sur le web à partir de Visual Studio n'a parfois pas de supprimer l'ancienne dll. J'ai eu le même problème, modifiez Web Package de Déploiement et ne me donne pas de problèmes.
J'ai eu le même problème dans mon asp.net site web, pour résoudre le problème j'ai volontairement ajouté erreur de compilation dans l'un des cs fichier dans le code de l'application par la suppression d'un point-virgule, puis j'ai rectifié le problème de compilation en ajoutant un point-virgule à nouveau.
Ce processus a entraîné l'application de compiler à nouveau.Après cette erreur a disparu.
L'autre cause de ce problème, ajouter votre modèle dans n'importe quelle solution de projet et de changement de votre projet de modèle.
Plus tard, je pense que cette structure est mauvais et le projet de Changement.
Tout était très bien, mais j'obtiens une erreur.
Des Détails de l'erreur : Le EntityContainer nom doit être unique. Un EntityContainer avec le nom "Entités" est déjà défini
Parce que j'ai oublié de changer le Web.Les fichiers de configuration.
VIEUX WEB.CONFIG
NOUVEAU SITE WEB.CONFIG
Ce Problème est Simple, mais peut entraîner une perte de temps. Je voulais donner un exemple. J'espère, c'est utile.
Grâce.
Pour résoudre le problème de l'Entité 6.2.0, VS 2017, seul edmx
J'ai changé le nom de mon modèle.edmx à un autre nom, construit le projet, puis a changé de nouveau à son nom d'origine.
Dans mon cas, probablement après la fusion d'une version dos, mon projet de démarrage (fichier csproj) est corrompue.
Al les classes d'Entité où ajoutée:
Après la suppression de toutes les entrées à la main le problème a été résolu.