Mappatura di un database precedente in ORM utilizzando le classi wrapper

1

Voglio utilizzare un ORM con un database precedente, ma non voglio esporre alcuni dei tipi di dati sottostanti. Ad esempio, alcune delle colonne sono valori nulli double o float e voglio che il mio modello di dominio utilizzi decimali non annullabili.

Sembra impossibile avere Entity Framework automaticamente tra questi tipi e forse per buoni motivi. Voglio anche essere in grado di usare le enumerazioni e finora non ho trovato alcun metodo che non assomigli a brutti hack per renderlo possibile.

La mia idea è semplicemente quella di usare wrapper, dove ho classi simili a tabelle mappate al database, ma le includo in classi di dominio "reali" da usare nel codice. La mia domanda è semplicemente se avete qualche idea su questo approccio o se avete qualche consiglio. Non ho esperienza nel mappare un database legacy in un ORM, quindi qualsiasi commento o suggerimento è apprezzato.

Nota: ho esaminato Entity Framework in modo che non conosca le capacità di altri ORM, come NHibernate.

    
posta Matsen75 02.04.2013 - 13:52
fonte

2 risposte

0

Racchiudere le tue chiamate di accesso ai dati SQL come stored procedure, quindi puoi esporre un diverso tipo di dati nei risultati dello sproc, eseguendo il cast all'interno della procedura, se necessario.

Quindi l'accesso ai dati diventa come un'API, non avrai bisogno di tutte le brutte informazioni sulla mappatura ORM e usalo solo per leggere e scrivere la "DB API" mantenendo tutta la struttura interna del DB nascosta.

    
risposta data 02.04.2013 - 15:30
fonte
0

Non ho usato molto EF, ma ho usato un po 'di NH.

NH funziona tipicamente su un modello (o entità se preferisci) per base di tabella. Cioè, c'è una classe per tabella nel database. La maggior parte degli ORM ha un modo per mappare i tipi di database in tipi C #. Ad esempio, sarebbe possibile convertire una colonna varchar (max) che contiene 'true' e 'false' in un bool in una classe C #.

Puoi anche fare un passo in più: se il tuo modello aziendale si basa sui clienti (la classe C #), ma i dati sono in una o più tabelle DB, puoi utilizzare combinare le classi mappate in un modello (CustomerInfo + AddressInfo = CustomerClass).

Creazione e test di un tipo di utente NHibernate personalizzato

    
risposta data 02.04.2013 - 15:05
fonte

Leggi altre domande sui tag