У нас есть приложение, которому нужен доступ к двум базам данных. Один из них - 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?