Configurazioni tramite Fluent Api in EF4.1 Code First

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
//and table generated column order.
HasKey(p => p.Uid).Property(c => c.Uid)
.HasDatabaseGeneratedOption( DatabaseGeneratedOption.Identity)
.HasColumnOrder(1);
// define column type (default navarchar(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 overrinding
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
}


Annunci

Informazioni su pythonyan

.Net Solution Developer at Be Smart
Questa voce è stata pubblicata in C# 4.0, EF4 e contrassegnata con , . Contrassegna il permalink.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...