Domanda

NHibernate non è particolarmente adatto al nostro ambiente a causa di tutte le dipendenze.(castello, log4net ecc.)

Esiste una buona alternativa leggera?

Il supporto per semplici database basati su file come Access/SQLite/VistaDB è essenziale.

Idealmente, qualcosa contenuto in un singolo assembly che fa riferimento solo ad assembly .NET.Se richiede solo .NET Framework 2.0 o 3.0, questo è un vantaggio.

È stato utile?

Soluzione

In generale, affinché il backend del tuo database funzioni con .net, hai bisogno di un provider ADO.Net.

Per MS Access (Jet), il provider viene fornito con .net.Per SQLite, esiste un provider ADO.Net autonomo.

Per quanto riguarda la libreria del livello di accesso ai dati, se vuoi un po' di astrazione su ADO.Net:

Tutti funzionano bene a partire dal framework 2.0 e versioni successive.

Fondamentalmente, Voi scegli (e c'è molta scelta)

Altri suggerimenti

Massiccio - https://github.com/robconery/massive

O

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

Entrambi sono un singolo file .cs senza dipendenze tranne ciò che è nel GAC.

(informativa completa, PetaPoco è qualcosa che ho scritto)

Per un ORM leggero che funzioni bene e richieda solo un singolo assemblaggio, perché non provarlo Velocità della luce da Mindscape.Non è open source, tuttavia il codice sorgente è disponibile e ha un prezzo ragionevole: il rischio con la maggior parte degli ORM che non sono ben adottati è ovviamente la qualità e il livello di supporto, e ci sono pochissimi altri ORM open source con cui vale la pena preoccuparsi nel formato . Spazio netto al momento.

A causa della tua antipatia per le dipendenze di NHibernate, sembra che tu non abbia bisogno di un framework di registrazione o di nessuno degli aspetti del progetto Castle, ad es.IoC, monorotaia ecc.Hai considerato che forse semplicemente prendendo il minimo indispensabile dei requisiti di NHibernate (log4net e le raccolte Iesi credo, e proxy dinamico dal progetto castle?) ed eseguendo ILMerge su di essi per consolidarli in un unico assembly - potrebbe richiedere un po' di manovre, ma non è troppo difficile - o in alternativa potresti semplicemente inserire il codice sorgente per ciascuno di questi progetti in una build personalizzata di NHibernate che mantieni per la tua organizzazione che elimina le funzionalità non richieste dal tuo progetto/organizzazione - non è così difficile/scomodo come sembra e ho fatto qualcosa in questo senso per un progetto in cui volevamo beneficiare di un ORM, ma dovevamo ridurre la dimensione dei file/programma di installazione distribuiti.

Inoltre, sei forse in grado di spiegare cosa ritieni sia troppo "pesante" in una soluzione basata su Nhibernate...nella mia esperienza è un framework ORM ragionevolmente leggero rispetto ad alcuni.

In aggiunta a questo elenco, potresti anche dare un'occhiata a Elegante (scritto e utilizzato da StackOverflow stesso).

alcune delle alternative:
- Registrazione attiva - utilizza nhibernate.dll in background, ma la configurazione avviene tramite attributi.È come la versione lite di nhibernate
- Subsonico
- CoolStorage.NET - L'ho usato molto con piccoli progetti.Funziona bene con il numero di dbs

Ecco un grande elenco di alternative, quelle che consiglierei:

  • Coolstorage
  • SOODA
  • ODX
  • Lightspeed (gratuito per 8 oggetti o meno)

Quei 4 sono i più leggeri.Subsonic, ActiveRecord e altri sono rivolti a sistemi di grandi dimensioni.Funzionano bene su sistemi più piccoli ma (almeno per ActiveRecord) vengono forniti con un enorme elenco di dipendenze ed eccessivi per un piccolo sistema.Io andrei con Lightspeed e direi che qualsiasi cosa sotto gli 8 oggetti è un piccolo sistema, e semplicemente usare NHibernate perché è ampiamente adottato è utile per il ridimensionamento ma a breve termine non ha senso - e avere uno strato tra l'ORM e i tuoi consumatori può funzionare comunque intorno a quello.

LINQ to SQL potrebbe essere una buona alternativa ai sistemi ORM "sollevati" se lo utilizzerai correttamente.

Se non hai bisogno di un ORM completamente funzionale e hai solo bisogno di un livello dati indipendente dal database veloce su ADO.NET, prova l'open source Libreria NI.Data (V2).È molto leggero (solo un piccolo assieme, senza altre dipendenze), fornisce tutta l'infrastruttura standard del livello dati:

  • astrazione delle query e parser per la sua rappresentazione di stringa chiamata 'relex' (sembra:"books(rating=5)[title,id]" - ottima alternativa a Linq-to-SQL e le espressioni possono essere composte al volo)
  • concetto di "vista" per incapsulare query SQL complesse dipendenti dalla sintassi DB
  • trigger di dati
  • autorizzazioni del livello dati per query di selezione/aggiornamento/eliminazione
  • dalla confezione supporta i provider MS SQL, SQLite, MySQL, Odbc/OleDb (MS Access).Il supporto per altri database SQL potrebbe essere facilmente aggiunto.

Il suo componente principale (DALC) è inizializzato solo con una riga di codice:

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

È tutto.Se è necessario il supporto del runtime .NET 2.0, è possibile provare a compilare l'ultima versione V2 con il runtime 2.0 o utilizzare la versione legacy precedente (NI.Data.Dalc, V1).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top