visual valid net example documentacion comment comentarios code c# .net visual-studio entity-framework exception-handling

valid - summary c#



El nombre de EntityContainer debe ser único. Un EntityContainer con el nombre ''Entidades'' ya está definido (12)

Cambié el nombre de mi proyecto, pero el archivo anterior todavía estaba en la carpeta bin. Solo tuve que eliminar la antigua DLL de la carpeta bin.

Para un pequeño fondo:

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 la aplicación app.config de este proyecto al archivo web.config. No están 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=&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>

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

Notará que el MetaData se está reescribiendo a una versión corta.

Cuando comento esa línea en cada clase obtengo este error:

No se puede cargar el recurso de metadatos especificado.

Cuando dejo esa línea en cada clase obtengo este error:

El esquema especificado no es válido. Errores:

Negotiation.Model.csdl (3,4): error 0019: El nombre de EntityContainer debe ser único. Un EntityContainer con el nombre ''Entidades'' ya está definido.

Sé que es algo simple, algo obvio. Cualquier sugerencia bienvenida ...


En mi caso, el problema fue causado porque mi cadena de conexión en Web.config recibió el mismo nombre que mi clase de contenedor de entidades.

Cambio

<add name="ConflictingNameEntities" connectionString="metadata=res://*/blahblah

a

<add name="ConflictingNameEntitiesConnection" connectionString="metadata=res://*/blahblah

y regenere la clase de contenedor haciendo clic derecho en ConflictingNameModel.Context.tt en el Explorador de soluciones y haciendo clic en "Ejecutar herramienta personalizada".


En mi caso, probablemente después de fusionar una versión, mi archivo de proyecto de inicio (csproj) se corrompió.

Al las clases de la Entidad donde se agregaron:

<Compile Include="Class.cs"> <DependentUpon>MyModel.tt</DependentUpon> </Compile>

Después de eliminar todas las entradas relevantes a mano, se solucionó el problema.


He encontrado una manera de guardar varios contenedores con el mismo nombre (namespaced por supuesto).

En EF5 y VS2012 puede establecer tres espacios de nombres diferentes. Primero puede hacer clic en el archivo edmx en el navegador de soluciones y en las ventanas de propiedades puede configurar el "Espacio de nombres de herramientas personalizadas", puede hacer clic en el archivo * .Context.tt justo debajo de edmx y establecer otro espacio de nombres allí, y finalmente Gracias a una pista de la excelente respuesta del Sr. Stuntz, me di cuenta de que al abrir el archivo edmx y hacer clic en el espacio en blanco, aparece otro campo de espacio de nombres en Esquema en la ventana de propiedades.

Creo que hemos terminado, no del todo, sé que puede ver el campo Nombre del contenedor de la entidad e intentará cambiar el nombre allí, pero parece que no funciona, se obtiene un pequeño error que aparece. Asegúrese de que todos sus archivos edmx tengan un espacio de nombres individual allí. (Me aseguré de tener un espacio de nombres único en los tres lugares)

Luego vaya a su Navegador de modelos y haga clic derecho en EntityContainer: Entity para ir a las propiedades y cambiar el nombre de sus contenedores. Desde esa ventana con el espacio de nombres establecido en todas partes, pude obtener múltiples contextos con el mismo nombre. Estaba lidiando con cosas como blahcontext y blahcontextcontainer de repente a pesar de que estaban en carpetas diferentes.

Cuando vea que es un problema de espacio de nombres. O la falta de ello.


La otra causa de este problema es agregar su modelo en cualquier proyecto de solución y cambiar su proyecto modelo.

--PROJECT A --> MODEL.EDMX --- WEB CONFIG -->Entity Connection --PROJECT B --- WEB CONFIG -->Entity Connection

Más tarde, creo que esta estructura es mala y el proyecto de cambio.

--PROJECT A using PROJECT.C; WEB.CONFIG - USE PROJECT C APP.CONFIG CONNECTIONSTRING --PROJECT B using PROJECT.C; WEB.CONFIG - USE PROJECT C APP.CONFIG CONNECTIONSTRING --PROJECT C (CLASS LIBRARY) --> MODEL.EDMX --- APP.CONFIG -->Entity Connection

Todo estaba bien, pero me sale un error. Detalle de error: el nombre de EntityContainer debe ser único. Un EntityContainer con el nombre ''Entidades'' ya está definido

Porque olvidé cambiar los archivos Web.Config.

VIEJA WEB.CONFIG

<add name="donatelloEntities" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=donatello;persist security info=True;user id=1;password=1;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

NUEVA WEB.CONFIG

<add name="donatelloEntities" connectionString="metadata=res://*/EntityModel.Model.csdl|res://*/EntityModel.Model.ssdl|res://*/EntityModel.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=donatello;user id=sa;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Este problema es simple pero puede causar pérdida de tiempo. Yo quería dar un ejemplo. Espero que sea útil.

Gracias.


Me encontré con esto. Parece que de alguna manera Entity Framework entró en mal estado en términos de qué tablas pensó que necesitaba agregar.

Normalmente, EF no reconocerá que se debe crear una nueva tabla hasta que coloque la línea

public virtual DbSet<NewTable> NewTable { get; set; }

dentro de tu clase de contexto.

Sin embargo, EF de alguna manera entró en un mal estado en el que la mera presencia de la clase NewTable en mi solución lo hacía pensar que necesitaba generar esa tabla. Entonces, cuando la línea de arriba en el contexto lo activó para crear una tabla NewTable, ya pensó que lo había hecho, de ahí el error sobre las entidades duplicadas.

Acabo de eliminar la clase NewTable de mi solución, comenté las cosas para que se volviera a compilar (afortunadamente no había mucho de esto), luego agregué una nueva migración para asegurarme de que estaba en blanco como debería haber sido. Luego, una vez que las cosas volvieron a un estado más predecible, volví a agregar la clase NewTable a la solución y agregar la migración funcionó bien.


Para resolver el problema Entity 6.2.0, VS 2017, single edmx

Cambié el nombre de mi model.edmx por otro nombre, construí el proyecto y luego lo cambié al nombre original.


Secuestrar esto, ya que es el resultado principal de Google para el mensaje de error.

En caso de que alguien más se encuentre con este solo utilizando un único modelo / contexto: una vez encontré este problema porque el ensamblaje que contiene el modelo / contexto se renombró y una copia con el nombre anterior permaneció en el directorio bin de la aplicación. La solución fue eliminar el archivo de ensamblaje anterior.


Si usa la implementación web desde Visual Studio, a veces no elimina los dlls antiguos. Tuve el mismo problema, cambié a Web Deployment Package y no me dio problemas.


Sus dos archivos EDMX probablemente tengan el mismo nombre de contenedor de entidad. Necesita cambiar (al menos) uno de ellos.

En el diseñador de GUI, abra el Navegador de modelos. Busque un nodo que diga "EntityContainer: Entities". Pinchalo. En Propiedades, cambie Name a otra cosa. Guardar y reconstruir


También tuve el problema, pero mi solución fue limpiar el directorio bin y luego eliminar la cadena de conexión con el nombre del contenedor de la entidad. Entonces podría cambiar el nombre de mis entidades y volver a poner la cadena de conexión.


Tuve el mismo problema en mi sitio web asp.net, para resolver el problema Añadí deliberadamente un error de tiempo de compilación en uno de los archivos cs en el código de la aplicación eliminando un punto y coma, luego rectifiqué el problema de compilación agregando el punto y coma nuevamente.

Este proceso hizo que la aplicación volviera a compilarse. Después de que este error desapareció.