O aplicativo que estou construindo atualmente usa procedimentos armazenados e modelos de classe criados manualmente para representar objetos de banco de dados. Algumas pessoas sugeriram o uso do Entity Framework e estou pensando em mudar para isso, já que não estou muito longe no projeto. Meu problema é que sinto que as pessoas que defendem a EF estão apenas me dizendo o lado bom das coisas, não o lado ruim :)
Minhas principais preocupações são:
- Queremos a validação do lado do cliente usando o DataAnnotations, e parece que eu tenho que criar os modelos do lado do cliente de qualquer maneira, então não tenho certeza de que o EF economizaria tanto tempo de codificação
- Gostaríamos de manter as classes o menor possível ao passar pela rede, e eu li que o uso do EF geralmente inclui dados extras que não são necessários
- Temos uma camada de banco de dados complexa que atravessa vários bancos de dados, e não tenho certeza de que a EF possa lidar com isso. Temos um banco de dados comum com usuários, códigos de status, tipos etc. e várias instâncias de nossos principais bancos de dados para diferentes instâncias do aplicativo. As consultas SELECT podem e farão consultas em todas as instâncias dos bancos de dados, no entanto, os usuários podem modificar apenas objetos que estão no banco de dados em que estão trabalhando no momento. Eles podem alternar bancos de dados sem recarregar o aplicativo.
- Os modos de objeto são muito complexos e muitas vezes há muitas junções envolvidas
Os argumentos para EF são:
- Concorrência. Não precisaria codificar as verificações para ver se o registro foi atualizado antes de cada salvamento
- Geração de código. A EF pode gerar modelos de classe parciais e POCOs para mim, no entanto, não tenho certeza de que isso me pouparia muito tempo, pois acho que ainda precisaríamos criar modelos do lado do cliente para validação e alguns métodos de análise personalizados.
- Velocidade de desenvolvimento, pois não precisamos criar os procedimentos armazenados CRUD para cada objeto de banco de dados
Nossa arquitetura atual consiste em um serviço WPF que lida com chamadas de banco de dados por meio de procedimentos armazenados parametrizados, objetos POCO que vão para / do serviço WCF e do cliente WPF e o próprio cliente de desktop WPF que transforma os POCOs em modelos de classe para fins de validação e Ligação de dados.
Então, minha pergunta é: a EF está certa para isso? Existem armadilhas sobre a EF que eu desconheço?