En mi solución tengo 2 proyectos en los que el uso de Entity Framework 6. Cada uno de los puntos a una base de datos diferente, ambos con el mismo proporcionar datos de SQL Server.
Un tercer proyecto en mi de la solución de las necesidades de uso de ambas bases de datos. Mi problema es cómo configurar dichas contexto. Traté de crear una configuración de clase en un conjunto independiente:

namespace OSAD_Base
{
    class EfDbConfiguration : DbConfiguration
    {
        public EfDbConfiguration()
        {
            SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
        }
    }
}

y las referencias a esta configuración en cada contexto de la clase:

namespace IntegrationDb
{
    [DbConfigurationType("OSAD_Base.EfDbConfiguration, OSAD_Base")]
    public partial class IntegrationEntities : DbContext
    {
        public IntegrationEntities(string connectionString)
            : base(connectionString)
        {
        }
    }
}

Al inicializar mi primera, todo funciona correcto, pero cuando el segundo contexto se inicializa (no importa el Orden) me llega error:

Una instancia de ‘EfDbConfiguration’ fue el set, pero este tipo no fue descubierto en la misma asamblea que los ‘B1Entities de contexto. Poner el DbConfiguration tipo en la misma asamblea que los DbContext tipo, uso DbConfigurationTypeAttribute en el DbContext tipo para especificar la DbConfiguration tipo, o establecer el DbConfiguration tipo en el archivo de configuración. Ver http://go.microsoft.com/fwlink/?LinkId=260883 para obtener más información.*

También traté de crear un entityframework sección en mi aplicación.config (de la puesta en marcha del proyecto), pero tengo el siguiente error:

De configuración del sistema no se ha podido inicializar

No reconocido de la sección de configuración entityFramework

¿Cómo puedo usar los 2 por separado EF Proyectos en la misma solución?

InformationsquelleAutor Motty | 2013-12-01

3 Comentarios

  1. 25

    No es importante que cómo muchos DbContexts tiene(En entity framework 6).
    Acabo de poner las cadenas de conexión en appConfig o webConfig de inicio del proyecto.

    Entonces usted está listo para ir.

    Ejemplo de appConfig con dos connectionString con Ef 6.01 & Sql Compact 4.0

    <configSections>
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </configSections>
      <connectionStrings>
        <add name="MainDb" connectionString="Data Source=|DataDirectory|\Db.sdf" providerName="System.Data.SqlServerCe.4.0" />
        <add name="AnotherDb" connectionString="Data Source=|DataDirectory|\AnotherDb.sdf" providerName="System.Data.SqlServerCe.4.0" />
      </connectionStrings>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="System.Data.SqlServerCe.4.0" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
        </providers>
      </entityFramework>

    Y el ejemplo de DbContexts:

    public class AppDb : DbContext
    {
        public AppDb()
            : base("MainDb")
        {
    
        }
    }
    
    public class AnotherDb : DbContext
    {
        public AnotherDb()
            : base("AnotherDb")
        {
    
        }
    }

    No es importante que tu contextos en proyectos separados o no, sólo de configuración de inicio del proyecto es importante.

    Hágamelo saber si alguna otra información que usted necesita.

    Buena suerte

    • No tengo problemas con connectin cadena. De que funciona correctamente. El problema es definir el proporcionar para el contexto. Tratando de agregar el marco de la entidad en la aplicación.config de la puesta en marcha del proyecto, los resultados en un error, como entity framework no es ni siquiera hace referencia allí. La adición de la etiqueta siguiente: código
    • Por favor, ver mi post anterior
    • Era el mismo proveedor con AppDb, AnotherDb pero dos o más proveedores múltiples de Configuración de la clase I fue imposibble que explican bajo el enlace «Movimiento DbConfiguration» sección. msdn.microsoft.com/en-us/data/jj680699.aspx Hay casos donde no es posible colocar su DbConfiguration clase en la misma asamblea como su clase DbContext
    • No contesta a la pregunta.
    • Esta respuesta que me satisfaga va a responder el «Título» por lo tanto esta respuesta me funciona bien.
    • Pregunta: Dos db contexto en dos proyectos diferentes. ¿Cómo puedo configurar sus conexiones? Respuesta: no importa cómo muchos de los proyectos que haya y donde son las clases. Basta con definir 2 cadenas de conexión en la aplicación.config o web.de configuración de inicio del proyecto y el uso de nombre de cadena de conexión en db en el contexto de las clases. Usted puede utilizar la misma o de base de datos diferente para cada db contexto y usted puede incluso utilizar diferentes motores de base de datos. Así que, ¿Cómo puedes decir que no responde a la pregunta «todos»?

  2. 10

    Cadena de conexión de EntityFramework 6 debe estar dentro del archivo de configuración que se encuentra (alerta!) en la ejecución de la carpeta.
    Por ejemplo OP tiene varios proyectos en solución, por lo que la cadena de conexión debe estar en el archivo de configuración pertenece a principal del proyecto ejecutivo.

    Ahora, si queremos definir la cadena de conexión en el código, usted puede hacer falso cadena de conexión en el archivo de configuración y darle a su entidad de instancia de la nueva cadena de conexión:

    DBEntities e = new DBEntities();
    e.Database.Connection.ConnectionString = "Data Source=MyServ;Initial Catalog=MyDB;Persist Security Info=True;User ID=sa;Password=***;Application Name=MyApp";
  3. 0

    Aquí es lo que yo hice para dos DB con EF6

    Web.config

          <connectionStrings>
            <add name="EntityContainer" connectionString="metadata=res://WebService/Database.Database.csdl|res://WebService/Database.Database.ssdl|res://WebService/Database.Database.msl; .../>
            <add name="ArchiveEntityContainer" connectionString="metadata=res://WebService/Database.Database.csdl|res://WebService/Database.Database.ssdl|res://WebService/Database.Database.msl; .../>
          </connectionStrings>

    Añadir el segundo constructor en la Base de datos.Contexto.tt (cuidado: código generado automáticamente)

    public <#=code.Escape(container)#>(string connectionString)
        : base(connectionString)
    {
    }

    Uso

    using (EntityContainer context = new EntityContainer())
    {
        //...
    }
    
    using (EntityContainer context = new EntityContainer("ArchiveEntityContainer"))
    {
        //...
    }

Dejar respuesta

Please enter your comment!
Please enter your name here