Entity Framework 6: нацеливание на две разные системы баз данных из одного приложения - PullRequest
2 голосов
/ 03 октября 2019

У нас есть приложение, которому нужен доступ к двум базам данных. Один из них - SQL Server, а другой - DB2. Мы обнаружили, что мы можем изменить поставщика базы данных, создав пользовательскую конфигурацию, например, для DB2:

public class DB2DBConfiguration : DbConfiguration
{
    public DB2DBConfiguration()
    {
        SetProviderServices(
            DB2ProviderServices.ProviderInvariantName,
            DB2ProviderServices.Instance);
        SetDefaultConnectionFactory(new DB2ConnectionFactory());
    }
}

internal class DB2ConnectionFactory : IDbConnectionFactory
{
    public DbConnection CreateConnection(string nameOrConnectionString) => new DB2Connection(nameOrConnectionString);
}

И затем мы добавим соответствующий атрибут поверх модели:

[DbConfigurationType(typeof(SQLServerDBConfiguration))]
public partial class ProductDBModel : DbContext

Это прекрасно работает, когда используется только одна модель с одной базой данных. Однако если мы хотим использовать DB2 и SQL Server одновременно (две разные модели БД с определенным типом DbConfigurationType), мы получим следующую ошибку для второго:

Экземпляр «SQLServerDBConfiguration» можетНе следует устанавливать, поскольку уже используется экземпляр "DB2DBConfiguration".

Что мы можем сделать с этим вопросом? Как мы можем нацелить две разные системы баз данных в одном приложении с Entity Framework?

...