È meglio? Ho ascoltato l'estensione CodeFirst ma è pronta per l'uso. Si prega di condividere la vostra esperienza con lo sviluppo, eventuali spese di prestazioni, eccCome si confronta EF4 con NHibernate?
risposta
Penso che questa sia una domanda puntuale, come mi chiedevo la stessa cosa. Sto cercando di creare un serio modello di e-commerce e sto cercando di mantenere i miei POCO privi di problemi di persistenza, oltre a cercare di rimanere fedele a Domain Driven Design. Finora, sono molto prudente, e sono fuori di testa se dovrei saltare la nave a NHibernate. L'unica cosa che mi impedisce di farlo è che presumo che Microsoft migliorerà (e rapidamente).
Alcuni dei più grandi problemi finora:
- Incapacità di finemente materializzazione oggetto di controllo. EF chiama il costruttore zero-arg sul tuo POCO, e questo è un comportamento che non puoi cambiare.
- Nessun supporto enum. La comunità ha urlato - urlando! - per questo, e non è successo. I workaround sono terribili e inquinano il tuo modello di dominio.
- bug mappatura strano quando si cerca di controllare i nomi delle colonne e le relazioni nel database. I principali a cui riesco a pensare sono le chiavi composte e le relazioni molti-a-molti. Questi possono essere risolti, e presumo che questi saranno fissati dal tempo di rilascio, ma sono comunque frustranti.
- SQL non valido. Faccio anche il DBA e l'SQL che EF genera (con o senza Code-First) è atroce.
E questa è solo la punta dell'iceberg: sto solo iniziando a imparare EF4 e sto correndo in posti di blocco terribili. Poiché penso a più motivi, li aggiungerò qui. Ci sto ancora lottando.
(mi chiedo se la comunità darà un altro voto di "sfiducia".)
Più:
- Per aggiungere al problema "Weird bug mappatura": non è possibile controlla il nome di una colonna se partecipa a una relazione autoreferenziale (ad esempio, se hai una gerarchia). Presumo che questo sarà risolto nella versione finale.
- Mancanza di dosaggio, con conseguente più andata e ritorno al database. Ad esempio, come si elimina un gruppo di elementi da una raccolta? Caricare tutte le entità in memoria ed eliminarle una alla volta. Un piccolo difetto è il numero di accessi al DB durante l'inserimento in tabelle che partecipano a una relazione di ereditarietà.
- No modo intelligente per affrontare le modifiche del modello. Codice EF: per prima cosa, ad esempio, elimina completamente l'intero database se è necessario modificare lo schema.
- punti di estendibilità pochi. Puoi letteralmente contare su una sola mano il numero di eventi a cui EF4 ti permette di iscriverti (e Code-First non fornisce molto di più).
Quanto a me - preferisco EF, ma con alcuni miglioramenti.Fondamentalmente EF vi offre i seguenti vantaggi:
- Visual Model Editor
- Database/Modello Aggiornamento procedura guidata (al posto di modifiche manuali XML - ciò che è terribile per me)
Inoltre, io sono utilizzando strumenti 3-rd parti commerciali a base di EF e L2S (LinqConnect) che forniscono per me le seguenti caratteristiche:
- Geography support
- Optimized SQL generation
- prodotto assolutamente integrato di Visual Studio
- Aggiornamento guidato intelligente del database (modalità di sincronizzazione)
Questo è molto interessante e utile. Spero di più che la gente commenta prima che i troll chiudano questo thread. –
Vorrei anche saperne di più, dato che sono/molto/in conflitto sull'impegno con il codice EF4. – anon
Questa è una lista molto buona. Tutti i punti validi che ho sperimentato negli ultimi mesi. Ho anche aggiunto la mancanza di supporto per il tipo di dati "GEOGRAFIA" di EF4 (SQL Server) e l'impossibilità di passare i tipi di tabella definiti dall'utente (anche SQL Server) ai processi memorizzati. Per combattere il primo, ho dovuto usare i grilletti, per combattere il secondo ho degaraded al classico ADO.NET. – RPM1984