Net Core:私有成员与数据注解查数据的区别

Net Core: Difference between Private Members and Data Annotations for Data Checking

在 类 中使用私有成员和用于数据验证检查的数据注释有什么区别?一种方式通常比另一种方式更有好处,或者它们是一样的。我没有意见,只是好奇。

1)

例如这里,我需要私有成员(比检查少than/greater)。

public class PageModel
{
    private int page;
    public int Page
    {
        get => page;
        set
        {
            if (value < 1 || value > 100) { throw new ArgumentException("Number should be between 1 and 100"); }
            else page = value;
        }
    }

2)

public class PageModel
{
    [Range(1,100, ErrorMessage="Number should be between 1 and 100")] 
    public int Page{get;set;}
}

数据注释和私有成员一样安全吗?

不对,差别很大

如果在 setter 中引发异常,则无法在不触发验证的情况下设置值。

如果您使用数据注释,您只需将元数据添加到 属性 以了解如何验证它。但是您需要一些东西来使用此元数据来进行验证。 EFCore 或 asp.net 使用此信息进行一些验证。

这意味着,如果您使用第一个实现,以下代码将抛出参数异常,但如果您使用数据注释,则执行。

new PageModel { Page = 300 };

要手动执行数据注释的验证,您必须调用 Validator.TryValidateObject