Domanda

Attualmente sto progettando una piccola applicazione CRUD.Il loro database è un enorme caos e cambierà frequentemente nel corso dei prossimi 6 mesi o un anno.Cosa consiglieresti per il mio livello dati:

1) ORM (se sì, quale?)

2) Linq2Sql

3) Procedure archiviate

4) Query parametrizzate

Ho davvero bisogno di una soluzione che sia sufficientemente dinamica (sia veloce che semplice) in cui posso sostituire tabelle e aggiungere/eliminare colonne frequentemente.

Nota:Non ho molta esperienza con ORM (solo un po' di SubSonic) e generalmente tendo a utilizzare procedure memorizzate, quindi forse quella sarebbe la strada da percorrere.Mi piacerebbe imparare Ling2Sql o NHibernate se entrambi consentissero la situazione che ho descritto sopra.

È stato utile?

Soluzione

Un aspetto fondamentale di cui tenere presente è che se lo schema del database cambia frequentemente, si desidera avere un certo livello di sicurezza del tipo in fase di compilazione.Ho riscontrato che questo è un problema con NHibernate perché utilizza file di mappatura xml, quindi se modifichi qualcosa nello schema del database, non saprai fino al runtime che la mappatura è interrotta.

Sarà anche un problema con i processi memorizzati.

L'uso di Linq2Sql ti darà il vantaggio di sapere esattamente dove si rompe il tuo codice quando modifichi uno schema in fase di compilazione.Questo per me è qualcosa che avrebbe la precedenza su tutto il resto se lavoro con uno schema che cambia frequentemente

Altri suggerimenti

Guarderei SubSonic con la configurazione del provider di build (progetto sito Web).Funziona benissimo perché rigenera automaticamente gli oggetti DAL ogni volta che crei il tuo progetto, quindi se il database cambia in un modo che interrompe il tuo codice, ricevi un errore di compilazione.

Ha funzionato bene finché lo schema del database non è diventato davvero complesso e non abbiamo raggiunto i limiti del modello ActiveRecord, ma finché lo schema non è estremamente complesso funziona piuttosto bene.Una volta che lo schema si è stabilizzato, puoi passare in modo da creare il DAL solo quando lo desideri.

Sicuramente vuoi usare un ORM.Qualsiasi ORM va bene, ma vuoi qualcosa che generi classi fortemente tipizzate.Quando i campi vengono aggiunti, modificati o eliminati da una tabella, vuoi essere in grado di rigenerare tali classi e gestire solo la correzione degli errori in fase di compilazione.Se utilizzi un modello dinamico, è probabile che si verifichino molti fastidiosi errori di runtime.Questo è molto importante!Faccio parte del La mia generazione team di sviluppo su sourceforge e penso che sia un'ottima soluzione al tuo problema.Puoi generare dOOdads, NHibernate, EasyObjects, EntitySpaces, ecc.Se vuoi optare per una soluzione più costosa, scegli CodeSmith O LLBLGen Pro.Buona fortuna: chiunque sia interessato a utilizzare MyGeneration, non esitate a contattarmi per domande.

Hibernate, ma solo se sei disposto ad avere un approccio basato sugli oggetti in cui definisci le tue classi, quindi definisci la struttura della tabella desiderata nei file di mappatura, quindi crea uno schema di database utilizzando le classi di generazione dello schema integrate di NHibernate.

Per farlo al contrario (ad esempio, hai un sacco di tabelle e poi basi la progettazione dell'oggetto su quello) ho trovato La mia generazione + Hibernate funziona, anche se non sono molto soddisfatto delle classi risultanti (principalmente perché sono un pignolo per la vera programmazione orientata agli oggetti).

Se fossi nei tuoi panni proverei a sfruttare ciò che sapevo (sprocs) con Linq2Sql.Linq2Sql può ancora utilizzare i tuoi sproc ma poi hai il vantaggio aggiuntivo di mettere un nuovo strumento nella cintura.Penso che avere una conoscenza della sintassi e della metodologia di Linq2XXX (X è una tecnologia casuale e non di intrattenimento per adulti... che non è una cattiva idea ora che ci penso) sarà una grande aggiunta alle tue abilità nell'uso Il collegamento su una raccolta di oggetti è davvero dolce.

Ma alla fine qualcosa come NHibernate ti si adatterà meglio a lungo termine.

EntitySpaces può rigenerare il tuo DAL/Business Layer in un minuto e senza perdita di codice, vedi la versione di prova ==> QUI

Nessuna registrazione necessaria, funziona anche con Visual Studio.

Utilizza EntitySpaces.mi manderai dei fiori, garantito.semplicemente fantastico.cambia il db come preferisci.premi il pulsante, bang.tutte le modifiche sono state apportate.senza modificare il codice personalizzato.Lo adoro.

Quanto è semplice l'applicazione?Se dovessi lavorare con elementi di schema/progettazione per un paio di mesi e non mi preoccupassi davvero di un'app vera e propria...Prenderei in considerazione l'utilizzo di EDM e di un progetto di applicazione Web Dynamic Data Entities.Questo ti permette di andare avanti con il minimo sforzo, secondo me.Ciò ti mantiene concentrato su schemi, dati e altre cose interessanti.Spero di non ricevere troppi colpi negativi da questo!

Ecco come apparirà la finestra di dialogo del nuovo progetto Questo

Sei già soddisfatto dei processi memorizzati e potrebbero essere sufficienti per astrarre lo schema mutevole.Se gli ORM non sono soddisfatti delle procedure memorizzate, forse funzionerebbero con le visualizzazioni che mantieni aggiornate in base allo schema in evoluzione.

Se lo schema del database cambia spesso, preferisci Entity Framework a LINQ2SQL.Se lo schema cambia, devi usare L2S
1) Rimuovi e aggiungi nuovamente la tua tabella (perdendo le tue personalizzazioni)
2) Modifica il modello a mano (come fatto qui in StackOverflow)

L'EF è un superset di L2S, che offre maggiore flessibilità di utilizzo e indipendenza dal DBMS

guarda perché sta cambiando e vedi se riesci ad anticipare e generalizzare il tipo di cambiamenti che ti arrivano in modo che non infrangano il tuo codice

un quadro può facilitare l’adattamento ai cambiamenti, ma un’analisi più approfondita avrà un vantaggio a lungo termine

Qualsiasi soluzione può funzionare, ciò di cui hai veramente bisogno è una serie di test che garantiscano il funzionamento delle operazioni di base come l'inserimento, la selezione, l'aggiornamento e l'eliminazione.In questo modo potrai semplicemente eseguire i tuoi test e verificare se le mappature sono aggiornate.

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