实体框架,保存枚举集

时间:2017-10-10 22:44:24

标签: c# entity-framework enums asp.net-core

我有一张表来保存联系人的电话号码。在表格中,我有电话限制与每个电话号码绑定。电话限制存储为枚举,但它们可能有多个电话限制。当我尝试创建迁移时,我收到错误

  

属性' PhoneNumber.Restrictions'无法映射,   因为它的类型是' ICollection'这不是一个   支持的基本类型或有效的实体类型。要么明确地映射   此属性,或使用' [NotMapped]'忽略它属性或   使用' EntityTypeBuilder.Ignore'在' OnModelCreating'。

我已经看过一些使用标志的教程,但是没有太多的信息/不清楚如何使用和教程来自5年多以前。

我的问题是,我们在实体框架中存储电话限制列表的最佳方式是什么?

CODE

public class PhoneNumber 
{
   public int Id { get; set; }
   public string PhoneNumber { get; set; }
   public ICollection<PhoneRestrictions> PhoneRestrictions { get; set; }
}

public enum PhoneRestrictions
{
    None = 0,
    DaysOnly = 1,
    DoNotCallDays = 2,
    Evenings = 3,
    NoWeekends = 4
}

1 个答案:

答案 0 :(得分:0)

实体框架只能看到技术上属于enum的值:int。在我看来,最简单的方法是创建一个包含PhoneRestrictionId / Name列的简单定义表(Description),然后创建一个 - PhoneNumberPhoneRestrictionDbContext之间的多对多关系。

modelBuilder.Entity<PhoneNumber>()
            .HasMany(a => a.PhoneRestrictions)
            .WithMany()
            .Map(a => a.MapLeftKey("PhoneNumberId")
                       .MapRightKey("PhoneRestrictionId")
                       .ToTable("PhoneNumberPhoneRestriction"));