我可以在实体框架核心中同时使用[必需]和null吗



我正在使用Blazor服务器端和Entity Framework Core 6(带迁移(开发web应用程序和数据库。目前,我正在实现CRUD操作的模型实体和服务类。

这是一个协议实体类的例子:

public class AgreementElement
{
[Key]
public int AgreementElementSeq { get; set; }
[Required]
public string Name { get; set; }    
[Required]
[Column(TypeName = "decimal(19,2)")]
public decimal? Price { get; set; }

[Required]
public DateTime? DateFrom { get; set; }

[Required]
public DateTime? DateTo { get; set; }
public bool? IsActive { get; set; }
...
}

启用了可为null的类型!

除了EF Core/C#中常见的可为null的类型之外,我使用[Required]的方式是否常见?

使用此选项的原因是:

  • 当添加到数据库中时,可为null的字段(bool? IsActive(被分配默认值true,因此应该可以包含null值,这样在创建AgreementE对象时未设置时不会引发异常
  • 数据库中具有[Required]属性(string Name(的字段不可为Null。默认值是"(实际上我不希望这是可能的(,所以也许它也应该为null
  • 同时为[Required]和可为null的字段:
    1. [Required]在数据库中不可为null-很好
    2. 如果DateTime字段不可为空(在DateTime之后缺少?(,则它将被设置为默认值(DateTime.Min(";01/01/0001";或者类似的东西。这导致CRUD内部出现额外的if(DateFrom==DateTime.Min({}。不好

使用DateTime?时,EF Core会自动检查null并抛出异常。美好的但打字后我需要[Required]?

做这些事情的正确方法是什么?

谢谢回复!

Ytou可以做一些类似的事情

[Required]  
public DateTime? DateFrom { get; set; } = null!;

如果您试图在"必需"字段上设置null。

在我这边,我尝试在持久性数据(在我们的例子中是DB保存(和代码之间应用相同的逻辑。如果一个属性在DB中可以为null,我也会尝试在C#中设置它为null。

我试图遵循的另一个原则是商业逻辑优先"这个字段可以为null有意义吗">

我很高兴看到其他成员的意见:(

相关内容

最新更新