实体中可为空字段的必需属性有什么优势

本文关键字:属性 什么 字段 实体 | 更新日期: 2023-09-27 18:32:10

例如,我有一个实体Entity,它有一个类型为 double? 的字段SomeValue

我为此字段设置了Required属性。此字段的行为是否像double

public class Entity
{
   [Required]
   public double? SomeValue { get;set;}
}

实体中可为空字段的必需属性有什么优势

它首先与 .NET 数据类型无关。相反,它是数据库列的客户端对应项是否可为空。如果不为标有 Required 属性的属性提供值,则实体将失效,而无需进行数据库服务器往返。

严格来说,可为空的 .NET 数据类型对于不可为空的数据库列没有意义。但这不是真正的重点...

下面是

一个实际示例,假设您有一个接受此请求的 asp.net 核心控制器:

public class ExampleRequest
{
    [Required]
    public Guid Id { get; set; }
}

如果使用空有效负载执行此请求,则验证将成功。但是怎么做呢?如果从请求中省略了Id,并且它是必需的,则它应该会失败...

实际上,Id默认为 Guid.Empty ,因此[Required]看到有效的 Guid 并通过验证。

如何保证空有效负载未通过验证?使用可为空的必填字段

public class ExampleRequest
{
    [Required]
    public Guid? Id { get; set; } = default!;
}

这样,空有效负载将导致验证失败的空Id