2017-10-10 139 views
0

我有一个表来保存联系人的电话号码。在表格中,我有限制每个电话号码的电话限制。电话限制存储为枚举,但可以有多个电话限制。当我尝试创建一个迁移我的错误实体框架,保存枚举集合

属性“PhoneNumber.Restrictions”无法映射, 因为它的类型是“ICollection的”,这是不是一个 支持的基本类型或一个有效的实体类型。要么显式映射 此属性,要么使用'[NotMapped]'属性忽略它,或者使用'OnModelCreating'中的'EntityTypeBuilder.Ignore'通过 忽略它。

我见过一些教程说使用标志,但没有太多的信息/不清楚如何使用和教程是从5年前。

我的问题是我们如何在Entity Framework中存储手机限制列表的最佳方式是什么?

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 
} 
+0

他们/他们希望他们如何存储在表中? – NetMage

回答

0

实体框架只能看到他们在技术上是一个enum值:一个int。最容易做的事情,在我看来,是创建一个简单的定义表(PhoneRestriction)与IdName/Description列,然后在DbContext创建PhoneNumberPhoneRestriction之间的许多一对多的关系。

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