Configurazioni tramite Fluent Api in EF4.1 Code First

Scritto da  Antonio Pierascenzi il martedì 3 maggio 2011  •  Linguaggio: C#   • 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

 
x