EF6 e várias configurações (SQL Server e SQL Server Compact)

Atualizar: Problema resolvido, veja o final desta questão.

O problema:

Estamos tentando usar o Entity Framework 6 e a configuração baseada em código em um cenário em que usamos o SQL Server e o SQL Server CE da mesma forma.AppDomain.

Este cenário bastante simples parece não ser suportado "por design". Da equipe da EF:

Nota: Não suportamos ter várias classes de configuração usadas no mesmo AppDomain. Se você usar esse atributo para definir diferentes classes de configuração para dois contextos, uma exceção será lançada.

Mais informações aqui:Configuração Baseada em Código (Codeplex)

A questão:

Como podemos avançar daqui? Qualquer ajuda seria muito apreciada! Existe uma maneira mais flexível de conectar uma configuração a um contexto em vez deAppDomain?

(Nossas classes de contexto estão localizadas em diferentes montagens. TentamosDbConfigurationType atributo, mas o problema é a própria EF)

Arquivos de configuração:

Configuração para o SQL Server normal

public class EfConfiguration : DbConfiguration
{
    public EfConfiguration()
    {
        SetProviderServices(
            SqlProviderServices.ProviderInvariantName, 
            SqlProviderServices.Instance);

        SetDefaultConnectionFactory(new SqlConnectionFactory());
    }
}

Configuração para o SQL Server Compact Edition

public class EfCeConfiguration : DbConfiguration
{
    public EfCeConfiguration()
    {
        SetProviderServices(
            SqlCeProviderServices.ProviderInvariantName,
            SqlCeProviderServices.Instance);

        SetDefaultConnectionFactory(
            new SqlCeConnectionFactory(SqlCeProviderServices.ProviderInvariantName));
    }
}

ATUALIZAR:

O erro que recebemos é:

System.TypeInitializationException: O inicializador de tipo para 'MyProject.Repositories.Base.DataContext' emitiu uma exceção. ----> System.InvalidOperationException: uma instância de 'EfCeConfiguration' foi definida, mas esse tipo não foi descoberto no mesmo assembly que o contexto 'DataContext'. Coloque o tipo DbConfiguration no mesmo assembly como o tipo DbContext, use DbConfigurationTypeAttribute no tipo DbContext para especificar o tipo DbConfiguration ou defina o tipo DbConfiguration no arquivo de configuração. Vejohttp://go.microsoft.com/fwlink/?LinkId=260883 Para maiores informações.

ATUALIZAÇÃO 2, a solução Conforme descrito acima, só podemos ter uma configuração. Isso é um problema, pois o Sql e o SqlCe usam provedores diferentes. Se usarmos "SetDefaultConnectionFactory" para ajustar um tipo de banco de dados, o outro falhará.

Em vez disso, forneça a conexão no contexto conforme descrito na postagem marcada como resposta abaixo. Uma vez que você sempre inicialize o contexto com uma conexão ao invés de um connectionstring, você está pronto para ir. Você pode remover a chamada SetDefaultConnectionFactory da configuração. Estamos usando apenas o código abaixo para configurar o Contexto SqlCe e nenhuma configuração para o Contexto Sql.

  public class CommonEfConfiguration : DbConfiguration
    {
        public CommonEfConfiguration()
        {
            // EF does not know if the ce provider by default,
            // therefore it is required to be informed about it.
            // The connection factories are not necessary since the connection
            // is always created in the UnitOfWork classes
            SetProviderServices(SqlCeProviderServices.ProviderInvariantName, SqlCeProviderServices.Instance);
        }
    }

questionAnswers(3)

yourAnswerToTheQuestion