Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

CSharp:EntityFramework

From Aino Wiki

Jump to: navigation, search

Teoria

ER è un framework ORM (Object/Relational Mapping) messo a disposizione dal Microsoft .NET Framework.
Questo framwork si interpone tra un DataBase ed il livello di applicazione\dominio fornendo facilitazioni per le operazioni CRUD, in altri termini nasconde il funzionamento di un database relazionale, permetterci di pensare al nostro modello dei dati come ad un insieme di oggetti direttamente accessibili dal codice dell'applicativo. Recupera e manipola dati usando oggetti fortemente tipizzati.

EF introduce un approccio Code-First, con ciò ci si concentra nel progetto di codifica del dominio creando le Entità dell'applicativo piuttosto che quelle del DataBase. Con l'approccio Code-First dell'EF il DataBase sarà creato al volo basandosi sulle classi\Entità e configurazioni nel codice sorgente dell'applicativo.

Nel codice vedere la cartella con il diagramma edmx (Entity Data Model x)

Considerazioni

Svantaggi': social.msdn.microsoft.com

L’accesso ai dati con Entity Framework anche se giova in fase di sviluppo, che ne velocizza di tempi, appesantisce in fase di manutenzione. Astraendo la base dati, impone che ogni modifica strutturale sia riverberata su entrambe i livelli. Occorrerà fare attenzione a tenere allineati entrambi i livelli, sovente è causa di aggiornamenti di versione non voluti complicando la diagnosi di problemi. Altra obiezione è la scarsa scalabilità (The number in a Microsoft screencast is a maximum of roughly 250 tables per EF model).

Unfortunately, the EF queries are generated by the provider that we cannot control. For some specified query that you want to customize, you can try DataContext.ExecuteQuery<TResult>(string query, params object[] parameters).

Materiale

Tutorial con concetti: entityframeworktutorial.net

Codice visto come esempio: codeproject.com

Da un progetto Visual Studio si può aggiungere un "New Item" ADO.NET Entity Data Model, es chiamandolo LearnEF avremo creato un LearnEF.edmx (Entity Data Model x)

Esempi


 

Tips

Transazioni

Articolo che parla di come il SaveChanges(), AcceptAllChanges() possa creare inconsistenze allorché si rende necessaria una transazione: blog MSDN
Occorre aggiungere la reference a System.Transactions
Pseudocodice:

using System.Transactions; // !!!
 
//..
using (TransactionScope scope = new TransactionScope()) 
{ 
    //Do something with context1 
    //Do something with context2
 
    //Save Changes but don't discard yet 
    context1.SaveChanges(false); 
 
    //Save Changes but don't discard yet 
    context2.SaveChanges(false);
 
    //if we get here things are looking good. 
    scope.Complete(); 
 
    //If we get here it is save to accept all changes. 
    context1.AcceptAllChanges(); 
    context2.AcceptAllChanges();
}

Allineamento del DB

Per rifare\aggiornare il binding con la basedati:

  • selezioanre il file *.edmx, doppio click;
  • del file aperto aprire il menu contestuale
  • selezioanre "Update Model from DataBase..."

Allineamento StoredProcedure

Esiste un caso particolare poichè possa fallire ovvero quando non è chiaro cosa la StoredProcedure restituisca, in questi casi esiste un "trucco" per fargli capire cosa restituisca, basta aggiungere in alto allo script quanto segue:

--Testata della SP

-- BEGIN EF Mapping
IF 1=0
BEGIN
      SELECT 
                    CAST(NULLAS DATETIME)                 AS 'DT_INSERT'
                    ,CAST(NULLAS NVARCHAR(50))             AS 'USERINSERT'
                    ,CAST(NULLAS DATETIME)                 AS 'DT_UPDATE'
                    ,CAST(NULLAS NVARCHAR(50))             AS 'USERUPDATE'
                    ,CAST(NULLAS UNIQUEIDENTIFIER)  AS 'ROWGUID'
END
-- END EF Mapping

--Selezione, immaginandola su tabelle temporanee o risultato di un EXECUTE @ScriptSQL
SELECT 
   DT_INSERT,
   etc,
   GUID
FROM #Tabella

Mappa e Link


C#


Visual Studio


Parole chiave: Entity Framework , EF

Author