Nello script #345 abbiamo visto come creare una convenzione custom da utilizzare in Code First con Entity Framework 6. In quello script abbiamo sfruttato il metodo OnModelCreating della classe DbContext. Se da un lato questa tecnica ci permette di aggiungere facilmente una convenzione a un contesto, dall'altro ci impedisce di riusarla su più contesti a meno che non si duplica il codice su ogni contesto.
Entity Framework 6 permette di creare classi all'interno delle quali possiamo definire convenzioni; se mettiamo queste classi in un assembly, poi possiamo usarle in più progetti riutilizzando quindi il codice invece che usando il copia e incolla.
Per creare una classe che contiene una convenzione custom, dobbiamo creare una classe che eredita da Convention e, nel suo costruttore, inserire il codice per la convenzione custom così come mostrato nel seguente snippet.
public class KeyConvention : Convention { public KeyConvention() { var prop = Properties().Where(p => p.Name.Equals("Chiave", StringComparison.OrdinalIgnoreCase)); prop.Configure(p => p.IsKey()); } }
Il metodo Properties ritorna i metadati di tutte le proprietà e noi filtriamo col metodo Where di LINQ le proprietà che si chiamano Chiave. Successivamente le impostiamo come chiave con il metodo Configure e IsKey esattamente come se ci trovassimo nel metodo OnModelCreating del DbContext.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Configurare lo startup di applicazioni server e client con .NET Aspire
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Potenziare la ricerca su Cosmos DB con Full Text Search
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Filtering sulle colonne in una QuickGrid di Blazor
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Utilizzare Container Queries nominali
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Gestione CSS in Blazor con .NET 9
Path addizionali per gli asset in ASP.NET Core MVC
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Il nuovo controllo Range di Blazor 9