2011-10-11 14 views
5

Sto valutando Entity Framework per un progetto su un database legacy. Il database è piuttosto ben progettato e si è già deciso che avremmo usato l'approccio Database-First. L'applicazione dovrebbe essere basata su WinForms ma vorrei pianificare in anticipo e tenere conto di ASP.Net, così come probabilmente sarà richiesto dalla gestione ad un certo punto e vorrei riutilizzare il DAL.Confuso sui generatori per Entity Framework 4.1

Ora, capisco che Entity Framework fornisce diversi modi per gli oggetti da generare l'entità:

  • oggetti derivati ​​da EntityObject
  • POCO (ObjectContext)
  • POCO (DbContext)
  • Auto -Tracking Entities (STE)

Ho cercato di confrontare i tre approcci e ho trovato d fuori questo finora.

Il modello EntityObject T4 è il più ricco di tutti. Ad esempio, inserisce i commenti del Modello entità in commenti XMLDoc sopra ogni classe e ogni proprietà dell'entità, che è piuttosto utile e utile in termini di manutenibilità del codice. Nessuno degli altri generatori supporta questo fuori dalla scatola (anche se capisco che è possibile modificare i modelli T4, ma ovviamente richiede un po 'di lavoro). D'altra parte, l'API di DbContext è un po 'più carina.

I tipi derivati ​​EntityObject forniscono un evento a cui è possibile agganciare quando cambia la proprietà di un'entità, utile per implementare la business logic.

Capisco che POCO è più naturale per questo, ma il generatore T4 sovrascriverà tutte le mie modifiche ogni volta che il modello cambia. Certo, i POCO generati sono classi parziali ma, per quanto ne so, non è possibile sovrascrivere una proprietà già definita in una classe parziale, quindi non sono sicuro di come viene implementata la logica di business al loro interno?

Un sacco di persone sembrano odiare le classi derivate EntityObject, preferendo l'approccio POCO, ma sembra che io stia perdendo un sacco di funzioni utili che vengono fornite immediatamente da EntityObjects, andando la rotta POCO. Considerando la forte preferenza generale sugli oggetti POCO, potrei fraintendere qualcosa, quindi la mia domanda.

Infine, quale generatore è il più adatto in un ambiente ASP.Net? Sono preoccupato che le modifiche alle mie entità smettano di essere tracciate? Le entità di auto-monitoraggio sono più utili in questo caso o hanno valore solo con i servizi web (che probabilmente non userò)?

Molte grazie in anticipo.

risposta

7

Se si desidera utilizzare EF 4.1, le opzioni sono solo DbContext Generator. Tutti gli altri generatori (POCO, EntityObject e STE) sono per ObejctContext API (EF 4.0). Ho descritto le differenze tra i generatori here.

Nel tuo caso il generatore EntityObject può essere utilizzato per WinForms ma sarà ingombrante per la soluzione ASP.NET in cui i POCO sono migliori perché l'applicazione ASP.NET è indipendente dallo scenario - dovrai comunque gestire il rilevamento delle modifiche in ASP.NET .

Lo scopo di imprese commerciali è descritto here ma non sono molto utili in WinForm in cui è possibile utilizzare direttamente collegato entità o ASP.NET dove demands to store them tra le richieste di stato di visualizzazione.

Qualsiasi logica aziendale che si desidera inserire direttamente nell'entità deve essere codificata nel generatore T4 altrimenti verrà sovrascritta dopo ogni generazione. Ogni funzionalità del generatore basato su EntityObject che hai citato può essere implementata anche nel generatore POCO/DbContext.

+1

Grazie. Questo è utile. Con "Qualsiasi logica di business che si desidera inserire direttamente nell'entità deve essere codificata nel generatore T4", vuoi dire che devo modificare il modello T4 in modo che generi gli eventi simili a On [Property] Changed of EntityObjects? Ho apportato alcune modifiche a un T4 una volta e non posso dire che sia stata un'esperienza divertente. Considerato questo, sono sorpreso di non vedere più script EF T4 condivisi, ma solo quelli MS. Inoltre, sono preoccupato che gli eventi probabilmente non verranno generati in un ambiente ASP.Net, vero? (Quando i dati verranno postati sul server)? –

+0

"Qualsiasi logica aziendale che si desidera inserire direttamente nell'entità deve essere codificata nel generatore T4 altrimenti verrà sovrascritta dopo ogni generazione" <---- Non è vero. È necessario inserire la logica di business in un file di classe parziale ** separato ** e verrà conservato senza problemi. Tutti i generatori sopra generano già classi parziali. – Bobson

+0

@Bobson: hai letto la domanda? Stiamo discutendo la logica aggiuntiva nelle proprietà generate. Vi sono ancora scenari in cui metodi parziali di classe o anche parziali non aiutano. –

Problemi correlati