实体中可为空字段的必需属性有什么优势
本文关键字:属性 什么 字段 实体 | 更新日期: 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
。