Настройка нескольких баз данных Entity Framework 6

c# dbcontext entity-framework entity-framework-6

Вопрос

В моем решении у меня есть 2 проекта, которые используют Entity Framework 6. Каждый указывает на другую базу данных, причем обе эти данные предоставляют SQL Server. Третий проект в моем решении должен использовать обе базы данных. Моя проблема заключается в том, как настроить этот контекст. Я попытался создать класс конфигурации в отдельной сборке:

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

и ссылаясь на эту конфигурацию в каждом классе контекста:

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

При инициализации моего первого, все работает правильно, но когда второй контекст инициализируется (Заказ не имеет значения), я получаю и ошибку:

Был установлен экземпляр «EfDbConfiguration», но этот тип не был обнаружен в той же сборке, что и контекст «B1Entities». Либо введите тип DbConfiguration в ту же сборку, что и тип DbContext, используйте DbConfigurationTypeAttribute в типе DbContext, чтобы указать тип DbConfiguration, или задайте тип DbConfiguration в файле конфигурации. Дополнительную информацию см. На странице http://go.microsoft.com/fwlink/?LinkId=260883 . *

Я также попытался создать раздел entityframework в моем app.config (проекта запуска), но получил следующую ошибку:

Не удалось инициализировать систему конфигурации

Нераспознанный раздел конфигурации entityFramework

Как я могу использовать 2 отдельных проекта EF в одном решении?

Популярные ответы

Не важно, сколько у вас DbContexts (в инфраструктуре сущностей 6). Просто введите строки подключения в appConfig или webConfig проекта запуска.

Тогда вы готовы идти.

Пример appConfig с двумя connectionString с 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>

И пример DbContexts:

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

    }
}

public class AnotherDb : DbContext
{
    public AnotherDb()
        : base("AnotherDb")
    {

    }
}

Не важно, что ваши контексты находятся в отдельных проектах или нет, важна только конфигурация проекта запуска.

Дайте мне знать, нужна ли какая-либо другая информация.

Удачи



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему