首页 > 解决方案 > 如何在父模型 CRUD 期间避免子属性 REQUIRED DataAnnotation

问题描述

请帮助我学习和更正我的代码...

目标:

  1. 在 City CRUD 期间:唯一需要的属性是 Name,ZipCode 可以为 null
  2. 添加 Contact.ContactAddresses 时,唯一需要的属性是 Line1,用户可以将 City 保留为 null/empty
  3. 一个联系人(需要 Name)可以有多个联系人地址(只有 ContactAddress.Line1 被填写,而 ContactAddress.CityId 和 ContactAddress.City 可以为空/空

问题:

当尝试更新包含具有NULL City 属性的联系人地址的联系人时,会引发错误,说明“城市:姓名字段是必需的,并且不能为空。 ”。

我相信当尝试更新包含 NULL ContactAddress.CityId 的联系人时,ContactAddress.City.Name 会引发 DataAnnotation 错误

问题:

如何在城市的 CRUD 期间在 City.Name 中使用所需的DataAnnotation,但在联系人的 Contact.ContactAddresses 的 CRUD 期间允许 City(以及因此 City.Name)为 NULL?

请参阅下面的型号代码:

public class Contact
{
    [Key]
    public int Id { get; set; }

    [Required(ErrorMessage = "Name field is required and must not be empty.")]
    [StringLength(50, MinimumLength = 3, ErrorMessage = "Name must be 3-50 characters long.")]
    public string Name { get; set; }

    public ICollection<ContactAddress> ContactAddresses { get; set; }
}

public class ContactAddress
{
    [Key]
    public int Id { get; set; }

    [StringLength(70, MinimumLength = 3, ErrorMessage = "AddressLine must be 3-70 characters long.")]
    public string AddressLine { get; set; }

    public int? CityId { get; set; }
    public City City { get; set; }
}

public class City
{
    [Key]
    public int Id { get; set; }

    [Required(ErrorMessage = "Name field is required and must not be empty.")]
    [StringLength(50, MinimumLength = 3, ErrorMessage = "Name must be 3-50 characters long.")]
    public string Name { get; set; }
    
    [StringLength(10, MinimumLength = 3, ErrorMessage = "Name must be 3-10 characters long.")]
    public string ZipCode { get; set; }
}

标签: c#.netentity-frameworkdata-annotations

解决方案


推荐阅读