簡體   English   中英

使用具有EF Code First方法的域模型中的枚舉值

[英]Using enum values in Domain Model with EF Code First approach

我在我的MVC應用程序中使用Entity Framework Code First方法,並且我為數據庫中的每個表都有一些實體類。 另一方面,我需要使用一些查找值,即性別,狀態,我不想創建單獨的域模型或表,因此我需要在相關的域模型類或單獨的類中定義enum值。 雖然網上有很多樣本,但我找不到適合EFMVC樣本。 您能否提供滿足此要求的示例用法?

注:我用MVC5EF6 這是我的實體類,名為Visitor和sample實體,可以在單獨的類(.cs文件)或同一類(.cs文件)中定義:

namespace MyProject.Entities
{
    public class Visitor
    {
        [Key]
        public int VisitorID { get; set; }

        public string VisitorName { get; set; }

        //[ForeignKey("ReasonOfVisit")]
        public byte ReasonOfVisit { get; set; }

        //code omitted for brevity
    }


    public enum ReasonOfVisit
    {
        NotSet = 0,
        Business meeting = 1,
        Periodic visit = 2,
        Getting information = 3,
        Leaving package = 4
    }
}

如果您想在EF模型中使用枚舉,可以嘗試以下解決方案:

    public class User
    {
        public string Id { get; set; }

        public RegistrationStatus RegistrationStatus { get; set; }
    }

    public class UserConfiguration : EntityTypeConfiguration<User>
    {
        public UserConfiguration()
        {
                this.Property(x => x.RegistrationStatus)
                .HasColumnType("int")
                .IsRequired();
        }
    }

    public enum RegistrationStatus
    {
        Pending = 1,
        Active = 2,
        Blocked = 3
    }

當然,盡可能簡化它。 你基本上做的是將你的枚舉映射到一些原始類型。 EF將自動轉換值,您可以根據需要使用它。

使用實體框架5.0以后,您可以使用您的枚舉:

namespace MyProject.Entities
{
    public enum ReasonOfVisit
    {
        NotSet = 0,
        For business reason = 1,
        For control = 2,
        For lefting package = 3,
        For leisure = 4
    }

    public class Visitor
    {
        ...

        public ReasonOfVisit ReasonOfVisit { get; set; }

        ...
    }
}

如果您使用EF <5.0,則可以使用映射到byte / int屬性的枚舉類型屬性

public class Visitor
{
    ...

    public byte ReasonOfVisitAsByte { get; set; }

    public ReasonOfVisit ReasonOfVisit { get { return (ReasonOfVisit)ReasonOfVisitAsByte; }  
                                         set { ReasonOfVisitAsByte = (byte)value; } } 

    ...
}

PS關於你的問題:

枚舉值的數據類型是什么

EF最有可能使用int類型

如何在此枚舉中定義字符串值

您不能直接使用字符串,但如果您使用屬性並做出一些額外的努力,則可以設置enum直接返回字符串而不是其int值。 你可以在這里閱讀更多相關信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM