Acredito que, se você tiver seus repositórios, use um ORM que já é suficiente abstraído do banco de dados.
No entanto, onde estou trabalhando agora, alguém acredita que devemos ter uma camada que abstraia o ORM, caso desejemos alterá-lo mais tarde.
É realmente necessário ou é simplesmente muito caro criar uma camada que funcione em muitos ORM?
Editar
Só para dar mais detalhes:
- Temos a classe POCO e a Entity Class que são mapeadas com o AutoMapper. A classe de entidade é usada pela camada Repository. A camada de repositório usa a camada adicional de abstração para se comunicar com o Entity Framework.
- A camada de negócios não tem acesso direto ao Entity Framework. Mesmo sem a camada adicional de abstração no ORM, esta precisa usar a camada de serviço que utiliza a camada de repositório. Nos dois casos, a camada de negócios é totalmente separada do ORM.
- O argumento principal é poder alterar o ORM no futuro. Como ele está realmente localizado dentro da camada Repository, para mim, já está bem separado e não vejo por que uma camada adicional de abstração é necessária para ter um código de "qualidade".