Pergunta

NHibernate não é realmente um bom ajuste para o nosso meio ambiente devido a todas as dependências. (Castle, log4net etc.)

Existe uma boa alternativa leve?

Suporte para bancos de dados baseados em arquivos simples, como acesso / SQLite / VistaDB é essencial.

Idealmente, algo contido em um único conjunto que apenas referências NET assembléias. Se ele requer apenas framework .NET 2.0 ou 3.0 que é um bônus.

Foi útil?

Solução

De um modo geral, para o seu banco de dados backend para o trabalho com .net você precisa de um provedor de ADO.Net para ele.

Para o MS Access (Jet), o provedor é fornecido com o .net. Para SQLite, existe um provedor de ADO.Net autônoma.

Quanto à lib camada de acesso a dados, se você quer um pouco de abstração sobre ADO.Net:

Todos os trabalhos bem começando com Framework 2.0 e para cima.

Basicamente, você escolha (e há um monte de opções)

Outras dicas

maciço - https://github.com/robconery/massive

ou

PetaPoco - https://github.com/toptensoftware/petapoco

Ambos são um único arquivo .cs sem dependências, exceto o que está no GAC.

(divulgação completa, PetaPoco é algo que eu escrevi)

Para um ORM leve que executa bem e apenas requer um conjunto único por que não experimentar Lightspeed de Mindscape. Não é open-source, no entanto fonte está disponível e é com preços razoáveis ??- o risco com a maioria de ORM que não são bem adotados é de qualidade e nível de apoio claro, e há muito poucos outros vale a pena aberta da ORM fonte incomodando com no. espaço net no momento.

Por causa de sua aversão a dependências do NHibernate parece que você não tem uma necessidade de um quadro de registro ou qualquer do castelo facetas do projeto, ou seja, IoC, Monorail etc. Já pensou talvez apenas tomar o mínimo de requisitos NHibernate ( log4net e as coleções Iesi eu acredito, e proxy dinâmico do projeto castelo) e funcionando ILMerge sobre eles para consolidá-los em uma única montagem -? pode levar um pouco de mexer, mas não é muito difícil - ou, alternativamente, você pode simplesmente puxar o código-fonte para cada um desses projetos em uma compilação personalizada do NHibernate-lo a manter para a sua organização que apara as características não exigidos pelo seu projecto / organização - não é tão duro / akward como parece e eu fiz algo ao longo destas linhas para um projeto onde queríamos nos beneficiar de um ORM, mas necessário para reduzir o tamanho dos arquivos distribuídos / instalador.

Além disso - você talvez capaz de explicar o que você sente é muito "pesado" sobre uma solução baseada em Nhibernate ... na minha experiência a um quadro ORM razoavelmente leve em comparação com alguns

.

Como adicionar a esta lista, você também pode ter um olhar para Dapper (escrito para e usado por -se StackOverflow).

algumas das alternativas:
- ActiveRecord - ele usa nhibernate.dll no fundo, mas a configuração é feita através de atributos. É como versão lite do nhibernate
- Subsonic
- CoolStorage.NET - eu usei-o muito com pequenos projetos. Funciona bem com número de dbs

Aqui está um grande lista de alternativas, que eu recomendo:

  • Coolstorage
  • SOODA
  • ODX
  • Lightspeed (livre para 8 objetos ou menos)

Aqueles 4 são os mais leves. Subsonic, ActiveRecord e outros são destinados a sistemas de grande porte. Eles trabalham muito bem em sistemas menores, mas (pelo menos para ActiveRecord) vêm com uma enorme lista de dependências e um exagero para um sistema pequeno. Eu iria com Lightspeed e dizer qualquer coisa com menos de 8 objetos é um sistema pequeno, e simplesmente usando NHibernate porque é amplamente adotado é bom para o dimensionamento, mas no curto prazo não faz sentido - e ter uma camada entre o ORM e seus consumidores podem trabalhar em torno de que de qualquer maneira.

LINQ to SQL poderia ser boa alternativa para sistemas ORM "alçada" se você vai usá-lo corretamente.

Se você não precisa ORM totalmente funcional e só precisa de banco de dados rápido camada de dados independente sobre ADO.NET experimentar open-source biblioteca NI.Data (V2) . É muito leve (apenas uma pequena montagem, há outras dependências), fornece toda infra-estrutura de camada de dados padrão:

  • consulta abstração e analisador para sua representação de seqüência chamada 'relex' (que parece: "livros (rating = 5) [título, id]" - muito boa alternativa para Linq-to-SQL e expressões podem ser compostas no voar)
  • conceito 'view' para encapsular consultas SQL dependente complexo DB-sintaxe
  • gatilhos de dados
  • permissões de camada de dados para selecionar / update / consultas excluir
  • A partir da caixa suportes MS SQL, SQLite, MySQL, ODBC / OLEDB Provider (MS Access). Suporte para outros bancos de dados SQL podem ser facilmente adicionados.

Seu principal componente (DALC) inicializada apenas com uma linha de código:

var dalc = new DbDalc(new SqlClientDalcFactory(), connectionStr);

isso é tudo. Se você precisa NET 2.0 runtime suporte você pode tentar compilar quer última versão V2 sob 2.0 tempo de execução ou usar legado anterior versão (NI.Data.Dalc, V1).

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