EF Core ModelState.IsValid 始终 return False ,因为导航 属性 为空

EF Core ModelState.IsValid Always return False , Because navigation property is null

这里有2个模型

public class Company
{
    [Key]
    public int Id { get; set; }
    [Required]
    [MaxLength(100)]
    public string Name { get; set; }
    [Required]
    [MaxLength(50)]
    
    public string Country { get; set; }
    [Required]
    [MaxLength(50)]
    public string Type { get; set; } = "Client";
    public DateTime CreatedDateTime { get; set; } = DateTime.Now;
    public List<Product> Products { get; set; }
}


public class Product
{
    [Key]
    public int Id { get; set; }
    [Required]
    [StringLength(25)]
    public string ProductCode { get; set; }

    [Required]
    [StringLength(25)]
    public string ProductType { get; set; }
    [StringLength(25)]
    public string MarketArea { get; set; }
    [Required]
    public int CompanyId { get; set; }
    public string? ReferenceCode { get; set; }
    public string? SpecialStructure { get; set; }
    [StringLength(255)]
    
    public string? Note { get; set; }
    [Required]
    public DateTime CreateDate { get; set; } = DateTime.Now;

    public virtual Company Company { get; set; }

}

如您所见,公司 属性 是 EF Core 的导航 属性。 但是当我提交表单来创建产品时,ModelState.IsValid 总是 returns False。原因是导航 属性 "Company" 为空。 现在,我可以将导航 属性 设置为可空 属性 来解决这个问题。

public virtual Company? Company { get; set; }

但是这个问题还有其他解决方案吗?

谢谢。

当我设置项目时 属性 禁用 或者在模型文件的顶部添加#nullable disable。

导航 属性“公司”不再包含在 ModelState 中。

你必须使用 net 6 你将在你的所有 类 中遇到这个问题,你必须解决它 - 让每个 属性 都可以为空,就像你已经对 Company 所做的那样,或者从您的项目配置中删除可空选项(或对其进行注释)

<PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <!--<Nullable>enable</Nullable>-->
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>