Pergunta

Atualmente estou arquitetando um pequeno aplicativo CRUD.Seu banco de dados é uma grande bagunça e mudará frequentemente ao longo dos próximos 6 meses a um ano.O que você recomendaria para minha camada de dados:

1) ORM (se sim, qual?)

2) Linq2Sql

3) Procedimentos armazenados

4) Consultas parametrizadas

Eu realmente preciso de uma solução que seja dinâmica o suficiente (rápida e fácil) onde eu possa substituir tabelas e adicionar/excluir colunas com frequência.

Observação:Não tenho muita experiência com ORM (apenas um pouco de SubSonic) e geralmente costumo usar procedimentos armazenados, então talvez esse seja o caminho a seguir.Eu adoraria aprender Ling2Sql ou NHibernate se algum deles permitisse a situação que descrevi acima.

Foi útil?

Solução

Uma coisa chave para estar ciente de aqui é que se o esquema de banco de dados está mudando com frequência, você quer ter algum nível de compilação segurança de tipo tempo. Eu descobri que isso seja um problema com NHibernate porque ele usa arquivos de mapeamento XML então se você mudar algo em seu esquema de banco de dados, você não sabe até que tempo de execução que o mapeamento está quebrado.

Ele também será um problema com procedimentos armazenados.

Usando Linq2Sql lhe dará a vantagem de saber onde exatamente seu código está quebrando quando você altera um esquema em tempo de compilação. Isto para mim, é algo que teria precedência sobre tudo o resto se eu estou trabalhando com um freqüentemente mudando de esquema

Outras dicas

Eu olhava para SubSonic com o provedor de compilação (site do projeto) setup. Isso funciona muito bem porque regenera automaticamente o DAL objetos cada vez que você construir seu projeto, por isso, se as alterações de banco de dados de uma forma que quebra seu código, você recebe um erro de compilação.

Isso funcionou bem até que o esquema do banco ficou muito complexo e fomos bater os limites do padrão de ActiveRecord, mas contanto que o esquema não é extremamente complexo que funciona muito bem. Uma vez que o esquema se estabiliza, você pode alternar para que você só está construindo o DAL quando quiser.

Você definitivamente quero usar um ORM. Qualquer ORM é ok, mas você quer algo que vai gerar classes de rigidez. Quando os campos são adicionados, modificados ou excluídos de uma tabela, você quer ser capaz de regenerar essas classes, e lidar com a fixação única erros tempo de compilação. Se você usar um modelo dinâmico, é provável que você tem muitos erros de execução desagradáveis. Isto é muito importante! Eu sou parte da MyGeneration equipe de desenvolvimento no SourceForge, e eu acho que é uma grande solução para o seu problema. Você pode gerar bugigangas, NHibernate, EasyObjects, EntitySpaces, etc. Se você quiser ir com uma solução mais cara, ir com CodeSmith ou LLBLGen Pro . Boa sorte -. Quem estiver interessado em usar MyGeneration, não hesite em contactar-me com perguntas

NHibernate , mas só se você seria passível de ter uma abordagem objeto-primeira na qual você define as suas aulas, e, em seguida, definir a estrutura da tabela desejada nos arquivos de mapeamento, em seguida, criar um esquema de banco de dados usando o NHibernate construído em aulas de geração de esquema.

Para fazê-lo o contrário (por exemplo, você tem um monte de tabelas e, em seguida, você basear seu projeto objeto em que) eu encontrei MyGeneration + NHibernate ao trabalho, embora eu não estou muito feliz com as classes resultantes (principalmente porque eu sou um defensor da verdade Programação Orientada a objetos).

Se eu estivesse no seu lugar eu tentaria alavancagem o que eu sabia (sprocs) com Linq2Sql. Linq2Sql ainda pode usar seus sprocs mas então você tem a vantagem adicional de colocar uma nova ferramenta em seu cinto. Eu acho que ter uma compreensão sobre o Linq2XXX (X ser uma tecnologia aleatório não adulto entretenimento .... o que não é uma má idéia agora que penso nisso) sintaxe e metodologia vai ser uma grande adição ao seu conjunto de habilidades usando Linq mais de uma coleção de objetos é muito doce.

Mas, afinal algo como NHibernate vai servi-lo melhor no longo prazo.

EntitySpaces pode regenerar seu DAL / Camada de Negócios em um minuto, e sem perda de código, consulte a versão de teste ==> AQUI

No registro necessário, é executado sob Visual Studio também.

Use EntitySpaces. você vai me enviar flores, garantiu. simplesmente incrível. mudar o db como você gosta. apertar o botão, estrondo. todas as alterações são feitas. sem alterar seu código personalizado. Eu adoro isso.

Como simples é a aplicação? Se eu fosse para estar trabalhando com coisas schema / design para um par de meses, e não realmente se preocupar com um aplicativo real. . . Eu consideraria usando EDM e uma Entidades projecto de aplicação Web de dados dinâmico. Este obter o seu curso com o mínimo de esforço, na minha opinião. Isso mantém você focado no esquema, de dados e outras coisas groovey. Eu espero que não fique muito muitos solavancos neg deste!

Veja como o novo diálogo projeto será parecido com este

Você já está feliz com procedimentos armazenados e eles podem ser o suficiente para abstrair o esquema mudando. Se ORMs não está feliz com procedimentos armazenados, em seguida, talvez eles trabalham com vistas que você se manter atualizado no topo do esquema mudando.

Se o esquema de banco de dados muda, muitas vezes, preferem o Entity Framework sobre LINQ2SQL. Se as alterações de esquema, utilizando L2S você tem que
1) Retire e re-adicioná-lo mesa (perder suas personalizações)
2) Modificar o modelo à mão (como é feito aqui em stackoverflow)

A EF é um super-conjunto de L2S, dando-lhe mais flexibilidade de uso e dbms-independência

olhada porque ele está mudando, e veja se você pode antecipar e generalizar os tipos de mudanças que vêm em você para que eles não quebrar seu código

um quadro pode fazer amáveis ??as mudanças mais fácil, mas uma análise mais profunda terá um benefício de longo prazo

Qualquer solução pode trabalhar, o que você realmente precisa é de um conjunto de testes que garantam que a operação básica como inserir, selecionar, atualizar e obras de exclusão. Desta forma, você pode simplesmente executar os testes e verificar se os mapeamentos são up-to-date.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top