根据 ASP.NET Core 和 Entity Framework Core 中的条件禁用 [必需] 属性

Posted

技术标签:

【中文标题】根据 ASP.NET Core 和 Entity Framework Core 中的条件禁用 [必需] 属性【英文标题】:Disable [Required] attribute base on condition in ASP.NET Core and Entity Framework Core 【发布时间】:2021-04-04 18:50:29 【问题描述】:

我有一个表 UserApplication,它有 100 多列。它的模型类如下所示:

public class UserApplication

    [Key]
    public int Id  get; set; 
    [Required]
    public string Name get; set; 
    [Required]
    public string LastName get; set; 
    public string Address get; set; 
    ....
    ....
    .....  
    // so on ....

我已将这些列数据分段分成多个页面(剃须刀页面 asp.net core 3.1)。所以大致我有10页,每页分别有10个列值,有些有必填属性

现在在页面加载时出现错误

SqlNullValueException:数据为空。不能对 Null 值调用此方法或属性

由于所需列的空值(在其他页面上)而发生此错误。

有什么方法可以在页面加载时禁用[Required] 属性?稍后在用户发布页面并显示所需的验证消息时启用它。

错误截图:

【问题讨论】:

你能举出你例外的例子吗? @Sergey:添加了错误截图 对不起,我仍然看不到最初的例外。您能先说明一下异常是在哪里出现的吗? 其实例外是来自数据库,所以某些属性的必要性和对应的表列存在差异-见***.com/questions/55883704/… 如果您有 10 页数据 - 您必须有 10 个模型类,每个模型类代表一页数据 - 在这种情况下,您可以为此特定页面设置 [Required] 注释并进行验证工作。 【参考方案1】:

我相信当您没有在数据库上构建和运行更新脚本时也会遇到此错误,因此您的数据库实际上没有它需要的列。

仔细检查一下,您是否为这些列创建了迁移,并将它们应用到您的数据库?

【讨论】:

数据库已经创建,数据插入完成,现在当我来验证部分时,我正面临这个问题。删除 required 将解决问题,但验证将停止工作,任何其他方法来实现这两者 您在读取操作中遇到此错误很奇怪,我希望在尝试将新的数据行插入数据库时​​看到这样的错误,而不是在执行.find 时您在迁移之前已经在此表中有行,并且在必填字段上没有默认值,可能导致创建包含无效数据的行?虽然......我相当确定,如果你尝试这样做,EF Core 会导致迁移失败并抱怨它需要一个默认值,如果我没记错的话。

以上是关于根据 ASP.NET Core 和 Entity Framework Core 中的条件禁用 [必需] 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ASP.net Core 配置 Entity Framework 6

使用 ASP.NET Core, Entity Framework Core 和 ABP 创建N层Web应用 第二篇

这是如何使用 Entity Framework Core 和 ASP.NET Core MVC 2.2+ 和 3.0 创建数据传输对象 (DTO)

使用 ASP.NET Core 和 Entity Framework Core 进行集成测试 - 如何在每次测试时恢复数据库中的测试数据?

C# ASP.NET Core Entity Framework Core 异步 ToQueryable 比较

ABP(ASP.NET core +Multi PageWeb Application) 根据官网给的例子做的简单的页面