Supportiamo gli Enum in EF4.1 CodeFirst
Scritto da
Antonio Pierascenzi il
martedì 17 maggio 2011
•
Linguaggio:
• Livello: 200
Sicuramente sarà capitato di doversi scontrare con questa
"mancanza" in fase di configurazione del mapping del nostro modello
di dominio con il modello dati fornitoci da EF4.
CodeFirst soffre ovviamente di questa problematica come annunciato dallo stesso team di
sviluppo di EF.
Per sopperire a questa mancanza possiamo applicare un workaround
basato sull'utilizzo di una classe che fa da wrapper al nostro enum
e che potrà essere interpretata, ad esempio, dall'engine di
CodeFirst come un Complex Type, dopo averla dichiarata tale in fase
di configurazione del Context. (vedi precedenti post sul tema).
// enum type
public enum Sex
{
Male=1,
Female=2
}
// wrapper class for enum support in EF4
public class TypeSex
{
public int Value { get; private set; }
public TypeSex(int value)
{
Value = value;
}
public TypeSex(Sex sex)
{
Value = (int)sex;
}
//perform implicit conversion
public static implicit operator int(TypeSex typeSex)
{
return typeSex.Value;
}
public static implicit operator TypeSex (int value)
{
return new TypeSex(value);
}
public static implicit operator Sex(TypeSex typeSex )
{
return (Sex)typeSex.Value;
}
public static implicit operator TypeSex (Sex sex)
{
return new TypeSex (sex);
}
}
La classe come vediamo opera delle conversioni implicite sul
tipo che dobbiamo persistere.Per maggiori info. http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx.
Di seguito un banalissimo esempio d'uso delle classe TypeSex che
"sostituisce", come proprietà della classe Person, l'iniziale enum
Gender.
// using on class person example
public class Person
{
public String Name { get; set; }
public String Surname { get; set; }
public DateTime? DateOfBirth { get; set; }
//use wrapper classe for EF4 support
public TypeSex Gender { get; set; }
}
Tags: EF4,CodeFirst