tutorial net mvc framework first español code asp c# entity-framework dbcontext entity-framework-6

c# - net - entity framework mvc 5



Configurar múltiples bases de datos Entity Framework 6 (3)

Aunque la pregunta es antigua, Google me dirigió aquí, pero no encontré respuesta. Tal vez mi respuesta ayude a alguien.

La cadena de conexión de EntityFramework 6 debe estar dentro del archivo de configuración que se encuentra (¡alerta!) En la carpeta de ejecución. 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 que pertenece al proyecto ejecutivo principal.

Ahora, si desea definir una cadena de conexión en su código, puede crear una cadena de conexión falsa en el archivo de configuración y dar una nueva cadena de conexión a la instancia de su entidad:

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

En mi solución, tengo 2 proyectos que usan Entity Framework 6. Cada uno apunta a una base de datos diferente, y ambos usan la misma información: SQL Server. Un tercer proyecto en mi solución necesita usar ambas bases de datos. Mi problema es cómo configurar esos contextos. Intenté crear una clase de configuración en un ensamblaje separado:

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

y haciendo referencia a esta configuración en cada clase de contexto:

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

Al inicializar mi primer trabajo, todos los trabajos son correctos, pero cuando el segundo contexto se inicializa (el orden no importa) recibo un error:

Se estableció una instancia de ''EfDbConfiguration'' pero este tipo no se descubrió en el mismo ensamblaje que el contexto ''B1Entities''. Ponga el tipo DbConfiguration en el mismo conjunto que el tipo DbContext, use DbConfigurationTypeAttribute en el tipo DbContext para especificar el tipo DbConfiguration, o establezca el tipo DbConfiguration en el archivo de configuración. Consulte http://go.microsoft.com/fwlink/?LinkId=260883 para obtener más información. *

También intenté crear una sección de marco de entidad en mi app.config (del proyecto de inicio) pero obtuve el siguiente error:

El sistema de configuración no pudo inicializarse

Sección de configuración no reconocida entityFramework

¿Cómo puedo usar 2 proyectos EF separados en la misma solución?


Esto es lo que 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>

Agregue el segundo constructor en Database.Context.tt (tenga cuidado: código generado automáticamente)

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

Utilizar

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


No es importante la cantidad de DbContexts que tiene (en el marco de la entidad 6). Simplemente coloque cadenas de conexión en appConfig o webConfig del proyecto de inicio.

Entonces estás listo para irte.

Ejemplo de appConfig con dos connectionString con Ef 6.01 y 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 ejemplo de DbContexts:

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

No es importante que sus contextos estén en proyectos separados o no, solo la configuración del proyecto de inicio es importante.

Déjame saber si necesitas alguna otra información.

Buena suerte