Der EntityContainer-Name muss eindeutig sein. Ein EntityContainer mit dem Namen 'Entities' ist bereits definiert

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

Frage

Für ein wenig Hintergrund:

Ich habe ein DLL-Projekt mit folgender Struktur:

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

Ich habe die Verbindungszeichenfolgen aus der app.config dieses Projekts in die Datei web.config verschoben. Sie befinden sich nicht im Abschnitt ConnectionString. Ich besitze stattdessen eine statische Klasse, die einen Teil der web.config verwendet und sie meiner App als AppSettings zur Verfügung stellt.

<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>

Ich habe 2 Klassen, eine für jeden Kontext und sie sehen so aus:

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;
        }
    }
}

Sie werden feststellen, dass die Metadaten in eine kurze Version geschrieben werden.

Wenn ich diese Zeile in jeder Klasse auskommentiere, erhalte ich diesen Fehler:

Die angegebene Metadatenressource kann nicht geladen werden.

Wenn ich diese Zeile in jeder Klasse belasse, erhalte ich diesen Fehler:

Das angegebene Schema ist nicht gültig. Fehler:

Negotiation.Model.csdl (3,4): Fehler 0019: Der EntityContainer-Name muss eindeutig sein. Ein EntityContainer mit dem Namen 'Entities' ist bereits definiert.

Ich weiß, es ist etwas Einfaches, etwas Offensichtliches. Irgendwelche Vorschläge sind willkommen ...

Akzeptierte Antwort

Ihre beiden EDMX-Dateien haben wahrscheinlich denselben Entitätscontainernamen. Sie müssen (mindestens) einen von ihnen ändern.

Öffnen Sie im GUI-Designer den Modellbrowser. Suchen Sie nach einem Knoten mit der Bezeichnung "EntityContainer: Entities". Klick es. Ändern Sie in den Eigenschaften Name in etwas anderes. Speichern und neu aufbauen.


Beliebte Antwort

Hijacking dies, da es das Top-Ergebnis von Google für die Fehlermeldung ist.

Für den Fall, dass jemand anderes auf dieses Problem stößt und nur ein einziges Modell / einen einzigen Kontext verwendet: Dieses Problem trat einmal auf, weil die Assembly, die das Modell / den Kontext enthielt, umbenannt wurde und eine Kopie mit dem vorherigen Namen im bin-Verzeichnis der Anwendung verblieb. Die Lösung bestand darin, die alte Baugruppendatei zu löschen.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum