2013-06-14 13 views
11

Ho tre progetti (progetti WCF, non client), ho un database per tutti, ora come userò EF con questo? dovrei fare un quarto progetto che avrà il contesto db e le entità e quindi aggiungere un riferimento ad esso in tutti e tre i progetti? o dovrei semplicemente avere un contesto separato per ogni progetto e aggiungere semplicemente le tabelle che mi servono per ogni progetto? alcuni dei tavoli sono davvero usati ovunque. quindi qual è la soluzione migliore per questo?Ho tre progetti che condividono lo stesso DB, qual è il modo migliore per utilizzare l'EF su tutti?

Un'altra domanda: dovrei esporre il contesto EF db nel progetto separato in modo che altri progetti possano accedervi? qualcosa come:

MySeparateProject myPr = new MySeparateProject(); 
using (var db = new myPr.DBContext()) 
{ 
    // do stuff with entities 
    db.SaveChanges(); 
} 

risposta

17

Penso che la cosa più pulita da fare è creare un progetto di accesso ai dati (libreria di classi) che contiene solo i tuoi modelli e contesto db, e il riferimento che da tutti gli altri progetti.

Alcune persone diranno che si dovrebbe creare una libreria di classi con solo i modelli, e poi hanno un'altra che ha il DbContext, e hanno classi di repository, e poi .... Sento che questo è eccessivo per la maggioranza di progetti. Avere i modelli e il contesto in un'unica posizione semplifica in modo semplice mantenere sincronizzati tutti i progetti dipendenti quando si tratta di accesso ai dati.

Ecco una tipica struttura di progetto per me:

enter image description here

Qui, Squelch.Data contiene tutti i miei modelli e contesti db, Squelch.Core contiene la logica core business, e la mia due "applicazioni" (Squelch.Portal annuncio CdrImport) e i vari casi di test, tutti fanno riferimento a queste librerie di classi di base.

+0

Beh, in realtà per una messa a punto migliore, senza sovraccaricarlo (e surmigrare su Migrations se andrai prima con il database) sarebbe un DAL con i modelli Contesto ed Entità e quindi una libreria Modelli per i BLL di un livello Applicazione da utilizzare. – Shockwaver

3

Vorrei creare un progetto di accesso ai dati separato. È buona norma separare il livello dati in ogni caso. A seconda della natura del progetto e del modo in cui si desidera testarlo, si consiglia di dare un'occhiata a qualcosa come il modello di repository (anche se c'è un dibattito sul suo valore con EF).

http://msdn.microsoft.com/en-us/library/ff649690.aspx

+0

In realtà questo è quello che avevo in testa, EF e il modello di repository è un tipo di doppio lavoro ... –