Configurazioni tramite Fluent Api in EF4.1 Code First
Scritto da
Antonio Pierascenzi il
martedì 3 maggio 2011
•
Linguaggio:
• Livello: 200
Abbiamo visto in un post precedente come configurare una
proprietà chiave utilizzando le Fluent Api in EF 4.1; se avessimo
l'esigenza, per la stessa entità, di dover configurare altri
elementi potremmo utilizzare una classe specifica. Attraverso le
seguenti righe di codice, oltre a definire un campo chiave per
l'entità, definiamo il tipo nvarchar(MAX) , di default nell'ultima
versione ma serve solo a scopi didattici, e la lunghezza. Inoltre,
elemento più importante, con la keyword Ignore impostiamo la
proprietà Description come non mappabile dall'engine di
CodeFirst.
Con l'ultima riga impostiamo il nome della tabella che deve essere
mappata sul database per l'entità in oggetto.
public class MyClassConfiguration :EntityTypeConfiguration<MyClass>
{
public MyClassConfiguration()
{
//define property key and database generated option, identity in this case, and table generated column order.
HasKey(p => p.Uid).Property(c => c.Uid).HasDatabaseGeneratedOption( DatabaseGeneratedOption.Identity).HasColumnOrder(1);
// define column type (default nvarchar(MAX) last release) and columnlength
Property(p => p.Name).HasColumnType("nvarchar(MAX)").HasMaxLength(4000);
//Ignore mapping on specific property
Ignore(p=>p.Description);
// declare table name
ToTable("MyTableName");
}
}
Fatto questo non resta che, in fase di definizione del nostro
Context, aggiungere nel metodo di override, OnModelCreating, del
builder del modello, la classe custom di configurazione della
nostra entità, dove abbiamo configurato anche un'entità Address
come ComplexType e rimosso una convenzione di default (
OneToManyCascadeDeleteConvention)
// Define class context
public class Context : DbContext
{
// constructor override database name if necessary or leave null, in this case will be created with context name
public Context() : base("Test_EF") { }
// define property DbSet
public DbSet<MyClass> MyClasses{ get; set; }
//override model creating method
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// apply custom configuration
modelBuilder.Configurations.Add(new MyClassConfiguration());
// define complex type example with Fluent Api
modelBuilder.ComplexType<Address>();
// Custom conventions overriding
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
}
Tags: EF4,CodeFirst