Para un poco de historia:El nombre de EntityContainer debe ser único. Un EntityContainer con el nombre de 'entidades' ya está definido
Tengo un proyecto DLL con la siguiente estructura:
Rivworks.Model (project)
\Negotiation (folder)
Model.edmx (model from DB #1)
\NegotiationAutos (folder)
Model.edmx (model from DB #2)
he movido las cadenas de conexión de aplicación de este proyecto. config para el archivo web.config Son no en la sección ConnectionString. Más bien, tengo una clase estática que consume parte de web.config y los expone a mi aplicación como 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>
tengo 2 clases, una para cada contexto y se ven así:
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;
}
}
}
Usted notará que los metadatos se está volviendo a escribir a una versión corta.
Cuando comento hacia fuera de esa línea en cada clase me sale este error:
Unable to load the specified metadata resource.
Cuando salgo de esa línea en cada clase me sale este error:
Schema specified is not valid. Errors:
Negotiation.Model.csdl(3,4) : error 0019: The EntityContainer name must be unique. An EntityContainer with the name 'Entities' is already defined.
Sé que es algo simple, algo obvio. Cualquier sugerencia bienvenida ...
sí - tan simple como eso. (Todavía intenta comprender el modelo general de EF en el nivel de clase (generalmente oculto).) –
También es posible que deba abrir el archivo EDMX en el bloc de notas ya que Visual Studio puede no recoger el cambio correctamente cuando simplemente cambia el nombre del contenedor en el panel de propiedades. –
En mi caso, tenía un archivo EDMX que solté y volví a agregar. Tuve que ir a través del Explorador de modelos => Propiedades para restablecer el nombre del contenedor. –