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>
这里有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>