Sto appena iniziando un progetto web estremamente grande, e cerco davvero di fare tutto bene.Perché dovrei usare Entity Framework codefirst se non può essere utilizzato in produzione in modo sicuro e cose come gli indici non possono essere descritte
miei strumenti che utilizzano finora sono
- ASP.NET MVC 3
- Entity Framework 4.3
- Ninject 3
Tutto sta andando bene, ma mi sto trovando alcuni cose con Entity Framework CodeFirst un po 'approssimativo.
Ad esempio, ho dovuto utilizzare http://codefirstmembership.codeplex.com/ per configurare le informazioni sull'appartenenza come parte della prima configurazione del codice. Questo sembra un po 'ropey di dover usare qualcosa di terze parti di questo. Ovviamente dovrei avere 1337 abbastanza da "tirare il mio" ma non voglio mordermi troppo dal cominciare. L'esecuzione di aspnet_regsql è orribile e si perderà con ogni aggiornamento di db. Comunque, ha funzionato tutto con la libreria di cui sopra e non è poi così male. L'impalcatura sembra essersi rotta comunque.
Al di là di tutto questo, ora sembra che questa roba diventerà probamatica quando sono in esecuzione nell'ambiente live. Qualsiasi modifica dello schema che intendo fare tra dev db e live db dovrà essere gestita manualmente con script comunque, quindi a quel punto non perderò prima il punto del codice?
Ho lavorato con Google App Engine per l'ultimo anno e speravo che il codice prima funzionasse essenzialmente allo stesso modo? Cioè, apportare modifiche e modificare i dati in tempo reale. Ora suppongo, a causa di non aver fatto un severo refactoring nel motore delle app, che fondamentalmente non danneggi nulla nella produzione. Quindi non potresti mai rinominare una tabella con AppEngine. Creerebbe sempre un nuovo tavolo e lascerà quello vecchio. Dovresti eseguire manualmente il porting dei dati.
Quindi ora sto pensando. Perché non basta andare prima al Database? Ho lavorato con linq2sql per 3 anni e mi sono sentito molto a mio agio con il primo db. Anche se TBH il mio controllo della sorgente db è stato un po 'scarso. Quindi speravo che il codice per prima cosa avrebbe rinforzato quella situazione per migliorarla, ma in realtà mi fa sentire che dovrei andare prima su DB, e solo essere severo nel tenerlo sotto controllo.
Gradirei davvero qualche idea su questo tipo di situazione, e anche, come si confronta con l'uso di Nhibinate?
Se non sei legato ad una particolare DB si potrebbe desiderare di guardare qualcosa di simile RavenDB. –
Non sono molto contrario all'utilizzo di MSSQL, dovremmo essere in grado di migrare parti di esso, quindi possiamo semplicemente ridimensionare l'utilizzo di Standard Edition, che EC2 supporta a un tasso relativamente accettabile. Probabilmente guarderebbero Mongo o Divano prima di Raven, qualsiasi motivo per andare prima a Raven? –
Una cosa da considerare è ciò che prima si vuole dal codice. Hai davvero intenzione di definire le tue tabelle in codice e di averlo creato, oppure è l'aspetto POCO di EF 4.3 che desideri? Il motivo per cui lo chiedo è che potresti utilizzare POCO e DbContext con Database First o Model First (puoi creare un T4 personalizzato per generare i POCO dal tuo modello). Il motivo per cui lo chiedo è perché a volte vedo persone che scrivono di "codice prima", quando la cosa che realmente sono dopo aver lavorato con POCO/DbContext. – JMarsch