Durante o processo de desenvolvimento de software existe sempre um interação na estrutura e ate mesmo na arquitetura isso é um desafio para manter o mínimo de acoplamento possível da aplicação. Uma forma de diminuir o acoplamento, é utilizar o principio da inversão de dependência.

Existem varias formas de se aplicar o principio, uma delas é utilizando o ninject um projeto muito simples que utiliza dois ORMs em uma única aplicação ou é possível decidir qual deles deve ser utilizado, muito legal, este design patterns é conhecido como persistência plugável então vamos ao projeto:

   Este projeto utiliza tanto o NHibernate como o EntityFramework 4.1 este é um projeto atualizado do Imasters, (ele utilizava o EntityFramework 4.0 então mudei para o 4.1 que é muito melhor), tive que mexer para ver como funciona. Você pode baixa-lo no link, bem o básico é mostrado abaixo.

   O diagrama mostra a estrutura da do projeto Core onde não existe nenhuma relação entre as persistências, para se utilizar dos métodos do repositório se instancia a interface e não a classe que implementa a interface isso é realizado pelo ninject. Abaixo vemos o construtor da Classe fabrica:

        public Fabrica()
        {
            // Nesse ponto definimos qual módulo de persistência
            //será utilizado.

            // USAR NHIBERNATE
            var persistencia = new ModuloNHibernate();

            // USAR ENTITY 
            //var persistencia = new ModuloEF4();

            this.Kernel = new StandardKernel(persistencia);
        }

   Veja que  a variável persistencia retorna uma instancia tanto do NHibernate como do EntityFramework , este projeto é bem básico e pode ser muito bem incrementado para utilizar os ORM dinamicamente pois cada um existem suas particularidades.

Valeu galera.