posts - 315, comments - 268, trackbacks - 15

My Links

News

View Pietro Libro's profile on LinkedIn

DomusDotNet
   DomusDotNet

Pietro Libro

Tag Cloud

Article Categories

Archives

Post Categories

Blogs amici

Links

EF CTP June 2011: Code First + Enums

Devo ammetterlo, non ho resistito alla tentazione e ho subito installato sulla VM la versione CTP June 2011 di Entity Framework. La prima feature che ho provato è il supporto agli enumerativi in modalità Code First. Partiamo subito con l’esempio. Banale classe Product e relativo DbContext:

public class Product
{
public string Code { get; set; }
public string Description { get; set; }
public DiscountType Discount { get; set; }
}

public class Db : DbContext
{
public DbSet<Product> Products { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Product>().HasKey(p => p.Code);
}
}

La classe Product espone la proprietà Discount di tipo DiscountType (Enum) cosi definito:

public enum DiscountType
{
Less_Than_20_percent = 0,
Less_Than_40_Percent = 1,
Less_Than_60_Percent = 2
}

Aggiungiamo del codice per creare e popolare il database:

Database.SetInitializer<Db>(new DropCreateDatabaseAlways<Db>());

using (Db db = new Db())
{
int productsCount = db.Products.Count();

////Add new product.
Product p1 = new Product() { Code = "COD123", Description = "Shoes", Discount = DiscountType.Less_Than_20_percent };
db.Products.Add(p1);

Product p2 = new Product() { Code = "COD124", Description = "Jacket", Discount = DiscountType.Less_Than_40_Percent };
db.Products.Add(p2);

Product p3 = new Product() { Code = "COD125", Description = "Skirt", Discount = DiscountType.Less_Than_60_Percent };
db.Products.Add(p3);

db.SaveChanges();
}

using (Db db = new Db())
{
Product pr = db.Products.Where(p => p.Discount == DiscountType.Less_Than_60_Percent).FirstOrDefault();

MessageBox.Show(string.Format("{0}-{1}", pr.Code, pr.Description));
}
Diamo uno sguardo al database creato:
image

Con la tabella Products così popolata:

image

Notevole Sorriso (Certo, se il supporto agli Enum, fosse arrivato qualche versione prima …)

Aggiornamento di servizio:

Piccola nota: finalmente sono riuscito a trovare qualche minuto per documentarmi. In questa versione il supporto agli Enum ha alcune limitazioni:

  1. I metodi ToString() e TryParse() non possono essere utilizzati nelle query
  2. Come sottolineava Raffaeu (vedi commenti) non è possibile mappare un Enum a stringhe e\o altri valori arbitrari
  3. Non è possibile utilizzare un Enum come campo discriminatorio nella gestione delle gerarchie classi\tabelle

Da quanto si legge queste limitazioni potrebbero essere superate con i prossimi rilasci. Vedremo.

Print | posted on sabato 2 luglio 2011 01:06 | Filed Under [ C# Entity Framework 4.1 ]

Feedback

Gravatar

# re: EF CTP June 2011: Code First + Enums

Ciao, sinceramente non lo so perchè ho scritto il post ieri sera sul treno ed ho letto frettolosamente la documentazione...però la questione è legittima e mi ha stuzzicato...
02/07/2011 12:58 | Pietro L.
Gravatar

# re: EF CTP June 2011: Code First + Enums

In questa release non è possibile mappare un Enum a una stringa o un valore arbitrario. Vedremo nei prossimi rilasci.
08/07/2011 23:38 | Pietro L.
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET