c# - 必需属性但可为空, Entity Framework 通过 Code First

标签 c# asp.net-mvc entity-framework ef-code-first entity-framework-migrations

如何使属性成为必需的(用于字段验证)但对于数据库代码迁移可为 Nullable?

我确实有一个包含一千个条目的数据库表。最近需要添加所需的 DateTime 属性。

    [Required]
    [Display(Name = "Birth", Order = 10)]
    public DateTime? Birth { get; set; } 

如果我设置了 [Required] 注释,代码优先迁移会将 NOT NULL 添加到列声明中。但是,所有当前条目都没有“出生”数据。它将为 NULL。

Birth 属性应该是 View 字段验证所必需的,但它可以在数据库中为空。这有可能吗?

我已经试过添加“?” (可为空)到属性和“虚拟”但没有成功。

最佳答案

使用您的模型进行数据库/实体通信。

为您的 UI 层使用 View 模型。在 ViewModel 的属性上标记 Required,在模型上标记 Nullable。根据需要在您的代码中执行转换。将所有与 UI 相关的属性装饰(如显示、验证等)也移动到 ViewModel。

可以使用 AutoMapper 自动执行转换插件,available通过 NuGet 包管理器。

关于c# - 必需属性但可为空, Entity Framework 通过 Code First,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799903/

相关文章:

c# - "struct"从哪里来?

c# - 使用内置 SQL 函数编译的 Linq 查询

c# - 这种异步/等待方法有什么问题?

c# - DropDownListFor Inside EditorFor 不选择值

c# - 是否可以为 MySql 和 Sql Server 提供 EF 上下文?

c# - NInject 单例 - 它们是在应用程序级别还是在 session 级别创建的?

c# - 如何获取在 asp.net 中使用我的 web api 的请求 url?

c# - 使用未分配的变量?

javascript - 创建/更新具有一对一关系的 Breeze 实体

c# - 消除循环并改用 Linq