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

Jac*_*ack 7 c# asp.net-mvc enums entity-framework domain-model

我Entity Framework Code First在我的MVC应用程序中使用方法,并且我为数据库中的每个表都有一些实体类.另一方面,我需要使用一些查找值,即性别,状态,我不想创建单独的域模型或表,因此我需要enum在相关的域模型类或单独的类中定义值.虽然有在网络上许多样品,我还没有找到一个合适的EF和MVC.您能否提供满足此要求的示例用法?

注意:我用MVC5和EF6.这是我的实体类调用Visitor和示例实体,可以在单独的类(.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
    }
}
Run Code Online (Sandbox Code Playgroud)

kam*_*lod 3

如果您想在 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
    }
Run Code Online (Sandbox Code Playgroud)

当然,我已经尽可能地简化了。您基本上所做的是将枚举映射到某种原始类型。EF 会自动转换值,您可以根据需要使用它。

  • 不需要此映射,EF 会自动执行此操作。 (2认同)