چگونگی تعریف خاصیتی از نوع Enum در EF Code First
فرض می‌کنیم که یک Enum بصورت زیر داریم :
[Flags]
public enum Gender : byte
{
     None=0, Male=1, Female=2,
};
حال می‌خواهیم از این Enum در یک مدل ساده استفاده کنیم. از آنجا که EF هنوز قادر به ‍‍‍‍‍‍‍‍‍‍پشتیبانی از Enum نمی‌باشد باید به روش زیر عمل کنیم:
1) توسط data Annotation
public class User
{
    public int UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Username { get; set; }

    [Column(Name="Gender")]
    public int InternalGender { get; set; }
    [NotMapped]
    public Gender Gender
    {
        get { return (Gender)this.InternalGender; }
        set { this.InternalGender = (int)value; }
    }

    public DateTime DateOfBirth { get; set; }
}
2) توسط Fluent API
 modelBuilder.Entity<Participant>().Ignore(p => p.Gender);
 modelBuilder.Entity<Participant>().Property(p => p.InternalGender).HasColumnName("Gender");

  • #
    ‫۱۱ سال و ۱۲ ماه قبل، جمعه ۷ مهر ۱۳۹۱، ساعت ۰۰:۴۰
    ممنون مطلب مفیدیه. فقط یه سوال: ما اگر یه سری Enum مثلاً برای Priority داشته باشیم، بعد بخوایم در زمان استفاده توی UI به صورت فارسی نمایش داده بشه باید چکار کرد؟
  • #
    ‫۱۱ سال و ۱۱ ماه قبل، یکشنبه ۲۱ آبان ۱۳۹۱، ساعت ۰۳:۲۶
    سلام.
    بسیار سپاسگزارم از زحمات شما.
    در خصوص کد فوق یک سوال داشتم.
    در قسمت تعریف خصوصیات مطابق کد زیر
    [Column(Name="Gender")] 
    در هنگام کامپایل برنامه با خطای زیر روبرو می‌شوم.
    'System.ComponentModel.DataAnnotations.Schema.ColumnAttribute' does not contain a definition for 'name'
     
     
    • #
      ‫۱۱ سال و ۱۱ ماه قبل، یکشنبه ۲۱ آبان ۱۳۹۱، ساعت ۱۴:۰۶
      Column در اسمبلی EntityFramework.dll تعریف شده؛ هرچند فضای نام آن در اصل متعلق به اسمبلی EF نیست.

    • #
      ‫۱۱ سال و ۱۱ ماه قبل، یکشنبه ۲۱ آبان ۱۳۹۱، ساعت ۱۴:۴۵
      به کمک ReSharper فضای نام‌ها و اسمبلی هایی که از قلم افتاده را سریعتر پیدا می‌کنید.
  • #
    ‫۱۱ سال و ۱۱ ماه قبل، یکشنبه ۲۱ آبان ۱۳۹۱، ساعت ۱۸:۲۰
    بهترین راه برای تعریف Enum در بانک و البته در راستای استفاده از اون در ef CodeFirst چیه؟
    1. تعریف جدول بصورت id, title (که مثلا id دقیقا مقدار متناظر با چیزی که سمت کلاینت برای enum در نظر گرفتیم باشه) و سپس سمت ef CF مثل یک جدول معمولی باهاش کار بشه؟
    2. تعریف اعداد در یک جدول و map کردن با مقدار متناظر enum در سمت کلاینت؟
    3. راه دیگه ای؟
    خودتون با enum‌ها به چه صورت برخورد می‌کنید و کار می‌کنید
    اگر ممکن است زیر ef5 صحبت کنید چون اون خودش enum support داره ولی بعضیا هنوز مثل من مجبورن زیر نسخه 5 کار کنن