ENX
ENX

Reputation: 171

Entity Framework error - "The EntityContainer name must be unique"

We have a solution which consists of two projects - a console application project and a web application project. Each of these has an identical in schema, but differently named .edmx file used to access the same database.

The console application runs as a scheduled task on the same server as the web application is hosted. The web application contains a reference to the console application as certain actions within the web application lead to methods in the console application being called. This combination has been running in our staging environment successfully for many months.

When released live we are seeing the following error message at least once a day:

Schema specified is not valid. Errors:

ProjectName.csdl(3,4) : error 0019: The EntityContainer name must be unique. An EntityContainer with the name 'ProjectEntities' is already defined. ProjectName.csdl(63,4) : error 0019: Each type name in a schema must be unique. Type name 'ProjectModel.DataSource' was already defined. ProjectName.csdl(75,4) : error 0019: Each type name in a schema must be unique. Type name 'ProjectModel.Error' was already defined.

This continues, listing all the type names in our schema.

This error can be fixed by recycling the application pool or restarting IIS.

Please note that the error does not occur until the web application has been running for a while - it is not occuring when we compile or the first time we access the application.

My initial theory was that the two Entity Containers are conflicting with each other because the web application references the console application, but they have different names, which makes the error "The EntityContainer name must be unique. An EntityContainer with the name 'ProjectEntities' is already defined" confusing.

Upvotes: 17

Views: 25386

Answers (11)

ZacH
ZacH

Reputation: 95

In my case, after trying all the solution given here I just put a connection string in comments and restarted VS 2019 and then I was able to modify a name.

Upvotes: -1

Himalaya Garg
Himalaya Garg

Reputation: 1609

My Entities were in another class library (MyLibrary.Data). Changing below worked :

<add name="Entities" connectionString="metadata=res://*/;&#xA;         provider=MySql.Data.MySqlClient; .....

<add name="Entities" connectionString="metadata=res://MyLibrary.Data;&#xA;         provider=MySql.Data.MySqlClient;

Upvotes: 0

FLICKER
FLICKER

Reputation: 6683

In my case none of the solutions worked. I finally recycled the IIS on my hosting to make it work. Hope this helps someone :)

Upvotes: 0

jayson.centeno
jayson.centeno

Reputation: 835

I fixed this issue in EntityFramework 6.0 by.

  1. During creation of the models, I name the .edmx to the name of the entities. i.e. (MYDbEntities)

  2. After creation i open the MYDbEntities.Context.cs and modified the "Entities" Class to "MYDbEntities".

  3. Open the App.Config and look for the connection string
  4. Open the MYDbEntities.Context.cs and change the connection string to Connection string from the config. example "MyDbConnection"
  5. Make sure that the connection string is like this

    metadata=res:///MYDbEntities.csdl|res:///MYDbEntities.ssdl|res://*/MYDbEntities.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=YourDb;persist security info=True;user id=sa;password=Sw0rdf!sh;multipleactiveresultsets=True;application name=EntityFramework"

Note: my entities resides in a separate DLL.

Hope this helps.

Upvotes: 1

Thentu
Thentu

Reputation: 89

Change the webconfig file entity connection string entry from this

metadata=res://*/App_Code.AAA.csdl|res://*/App_Code.AAA.ssdl|res://*/App_Code.AAA.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=XXX;initial catalog=XXX;user id=XXX;password=XXX;multipleactiveresultsets=True;App=EntityFramework&quot;" 
providerName="System.Data.EntityClient

to

metadata=res://MyProject/App_Code.AAA.csdl|res://MyProject/App_Code.AAA.ssdl|res://MyProject/App_Code.AAA.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=XXX;initial catalog=XXX;user id=XXX;password=XXX;multipleactiveresultsets=True;App=EntityFramework&quot;" 
providerName="System.Data.EntityClient

Upvotes: 8

fordareh
fordareh

Reputation: 2963

Just in case anyone else is desperate and not finding any answers - I accidentally ended up with a copy of my .edmx file included in the project in a second location. Both were being included in the build.

;-)

If this happened to you, fear not: You were not the first.

Upvotes: 4

John Zumbrum
John Zumbrum

Reputation: 2856

Note when trying to rename a entity container to that of a previously deleted entity container, you will need to go into your web.config or app.config and delete the connection string out of the configuration section.

Upvotes: 0

Bill Berlington
Bill Berlington

Reputation: 2414

This error occurs when you have more than one entity model.edmx files in a single DLL or class library project. Although the reason behind the error is not known to me , you can fix this by deleting the other model or moving the other model.edmx file to another class library .

Also dont forget to remove the references of the previous dll

Upvotes: 2

Gui Ferreira
Gui Ferreira

Reputation: 4627

Go to that bin folder and delete dll and pdb file manually.

Upvotes: 24

Julio Avila
Julio Avila

Reputation: 21

Well, in my case I'm working diferent software architecture, because I have diferent projects (dlls), they access to the same Database, but I have diferent entities inside. So, when I have references in a project that needs all or at least two of them, i get this error

If I change the Entity Container Name on each one, I solve the problem, but now my connection string are diferent and I have to include all the connection strings in the config file for each dll I refer.

Upvotes: 2

Zhaph - Ben Duguid
Zhaph - Ben Duguid

Reputation: 26956

When faced with this problem in the past, I've always created a third, shared library that contains the entity model - that way you know there's not going to be a name conflict, if you decide to add a new table/column/method to the model you only need to do so once, etc, etc.

Upvotes: 15

Related Questions