2011-02-04 11 views
5

tengo dos proyectos:El nombre de EntityContainer debe ser único en diferentes ensamblados?

  • News.Data
  • Tags.Data

Ambos definen Entities. Cuando intento ejecutar

using (var db = new News.Data.Entities("name=Entities")) 
{ 
    results1 = db.News.ToList(); 
} 

using (var db = new Tag.Data.Entities("name=Entities")) 
{ 
    results2 = db.Tag.ToList(); 
} 

en una aplicación de consola me sale este error:

Schema specified is not valid. Errors: Model1.csdl(3,4) : error 0019: The EntityContainer name must be unique. An EntityContainer with the name 'Entities' is already defined.

¿Es posible utilizar

News.Data.Entities 
Tags.Data.Entities 

en lugar de

News.Data.NewsEntities 
Tags.Data.TagsEntities 

?

Respuesta

4

connectionStrings se configuran a nivel de aplicación, y la ContainerName sirve como un identificador único. Cambie containerNames a un valor único, reemplace el constructor predeterminado ObjectContext para buscar tal vez Setting, que se puede configurar en el nivel de ensamblaje.

Editar: Al crear una instancia de un ObjectContext, News.Data.Entities en este ejemplo, la clase base de su contexto se construye normalmente con una ContainerName. Este parámetro proporciona al ObjectContext toda la información necesaria para establecer su conexión de tienda y hacer todo su trabajo de mapeo.

Básicamente, se realiza una asociación entre el tipo ObjectContext y el ContainerName. Al crear instancias de su segundo contexto Tags.Data.Entities, que es un tipo diferente, intentará asociar el tipo con el contenedor y esto es lo que arroja la excepción, ya que no puede asociar el mismo Nombre de contenedor dos veces.

Para resolver el problema, si puede, lo mejor sería recrear el EDMX, con diferentes nombres de contenedor. Si eliminar no es una opción, puede modificar el parámetro NombreContenedor en el diseñador, luego abrir el edmx en el bloc de notas, buscar "EntidadesModeloContaedor de Entidades" y cambiar la parte "Entidades" a cualquiera que sea su nuevo Nombredecontenedor.

creo que sirve ...

+0

La conexión no es un problema, el nombre de clase es. – BrunoLM

+0

Lo sé, pero el contenedor también debe ser único a nivel de aplicación. Tiene dos contenedores con el mismo 'Nombre de contenedor '. El hecho de que le da una colisión en la configuración debe ser su primera pista. Básicamente, EF asocia la instancia de ObjectContext con el EDMX para quien proporcionó el identificador único (= nombre del contenedor) a través de su constructor. –

+0

La parte más útil de las respuestas anteriores es el detalle sobre cómo abrir el EDMX directamente en el bloc de notas. Visual Studio no puede actualizar el EDMX correctamente con solo c colgando el nombre del contenedor en el panel de propiedades de VS. Las respuestas anteriores a preguntas similares no han podido señalar este detalle. –

0

I le has probado esto:

using (var db = new News.Data.Entities("name=NewsEntities")) 
{ 
    results1 = db.News.ToList(); 
} 

using (var db = new Tag.Data.Entities("name=TagEntities")) 
{ 
    results2 = db.Tag.ToList(); 
} 

Su problema es que los dos proyectos tienen el mismo nombre del contenedor entidad. Necesita cambiar (al menos) uno de ellos.

Editar: Lo siento, para responder a su pregunta exacta ... ¡No!

Is it possible to use

News.Data.Entities 
Tags.Data.Entities 

instead of

News.Data.NewsEntities 
Tags.Data.TagsEntities 
+0

Estoy usando el mismo 'connectionstring'.' BrunoLM

+0

Ah, ya veo ... el nombre = parte del constructor era la cadena de conexión a usar. – Odhran

+0

Ok , como ya he dicho, necesita tener diferentes nombres de contenedor de entidades. Renombrarlos como sugirió a NewsEntites y TagEntities. – Odhran

0

El problema podría no estar con su lógica. Encuentro esto a veces cuando cambio de perfil de compilación. Para solucionarlo, borro todos los archivos temporales y hago una compilación limpia.

Cuestiones relacionadas