如何将字段映射到 class 的新实例?

How to map a field to a new instance of a class?

我正在编写一个 ASP.NET 核心 WebAPI 项目,但遇到映射问题。由于我无法在 Entity Framework Core 中创建基元集合,因此我创建了一个实体来存储所需的基元。但是在上层我真的不需要一个单独的 class 和一个原语。是否可以创建从 class 到原语(为了方便使用)并返回(将它们存储在数据库中)的映射?

Realtor.cs

    [Key]
    [Required]
    public int Id { get; set; }

    [Required]
    [MaxLength(20)]
    public string FirstName { get; set; }

    [Required]
    [MaxLength(20)]
    public string SecondName { get; set; }

    [Required]
    [MaxLength(20)]
    public string LastName { get; set; }

    [Required]
    public ICollection<PhoneNumber> Numbers { get; set; }

    [ForeignKey("Photo")]
    public int PhotoId { get; set; }
    public Image Photo { get; set; }
}

PhoneNumber.cs(即class原始)

    [Key]
    [Required]
    public int Id { get; set; }

    [Required]
    [StringLength(13, MinimumLength = 10)]
    public string Number { get; set; }

Realtor.cs(业务层)

    public int Id { get; set; }
    public string FirstName { get; set; }
    public string SecondName { get; set; }
    public string LastName { get; set; }
    public ICollection<string> Numbers { get; set; }
    public int PhotoId { get; set; }
    public Image Photo { get; set; }

所以我在这里需要的是将 ICollection<PhoneNumber> 绑定到 ICollection<string>。还是不这样做更好?

可以将 映射到 一个 IEnumerable<string> 用于显示等,但是如果您添加或修改,您应该坚持使用 List<PhoneNumber>。这是因为每个 phone 号码的 PK 都至关重要。否则,您最终将添加新的(即重复的)phone 条记录,而不是修改现有记录。