C# 如何在父模型CRUD期间避免子属性必需的DataAnnotation

C# 如何在父模型CRUD期间避免子属性必需的DataAnnotation,c#,.net,entity-framework,data-annotations,C#,.net,Entity Framework,Data Annotations,请帮助我学习并更正我的代码 目标: 在城市CRUD期间:唯一需要的属性是Name,ZipCode可以为null 添加Contact.ContactAddresses时,唯一需要的属性是Line1,用户可以将城市设置为null/空 一个联系人(必须有姓名)可以有多个联系人地址(仅填写ContactAddress.Line1,而ContactAddress.CityId和ContactAddress.City可以为空) 问题: 当尝试更新包含具有空城市属性的联系人地址的联系人时,会抛出一个错误,例如

请帮助我学习并更正我的代码

目标:

  • 在城市CRUD期间:唯一需要的属性是Name,ZipCode可以为null
  • 添加Contact.ContactAddresses时,唯一需要的属性是Line1,用户可以将城市设置为null/空
  • 一个联系人(必须有姓名)可以有多个联系人地址(仅填写ContactAddress.Line1,而ContactAddress.CityId和ContactAddress.City可以为空)
  • 问题:

    当尝试更新包含具有空城市属性的联系人地址的联系人时,会抛出一个错误,例如“城市:名称字段是必需的,不能为空。

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

    问题:

    如何在City的CRUD期间在City.Name中使用必需的数据注释,但在Contact.ContactAddresss的CRUD期间允许City(以及因此而来的City.Name)为空

    请参见下面的型号代码:

    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; }
    }
    
    公共类联系人
    {
    [关键]
    公共int Id{get;set;}
    [必需(ErrorMessage=“名称字段是必需的,不能为空。”)]
    [StringLength(50,MinimumLength=3,ErrorMessage=“名称长度必须为3-50个字符。”)]
    公共字符串名称{get;set;}
    公共ICollection联系人地址{get;set;}
    }
    公共类联系人地址
    {
    [关键]
    公共int Id{get;set;}
    [StringLength(70,MinimumLength=3,ErrorMessage=“地址行长度必须为3-70个字符)。]
    公共字符串地址行{get;set;}
    公共int?CityId{get;set;}
    公共城市城市{get;set;}
    }
    公营城市
    {
    [关键]
    公共int Id{get;set;}
    [必需(ErrorMessage=“名称字段是必需的,不能为空。”)]
    [StringLength(50,MinimumLength=3,ErrorMessage=“名称长度必须为3-50个字符。”)]
    公共字符串名称{get;set;}
    [StringLength(10,MinimumLength=3,ErrorMessage=“名称长度必须为3-10个字符。”)]
    公共字符串ZipCode{get;set;}
    }
    
    请确保ContactAddress.City也为空,否则不应将其作为实体附加谢谢Shantanu先生!检查并确保ContactAddress.City为空实际上解决了问题@GAC我理解称呼人们先生是件事,但不要假设性别。那永远都不好。