c# - C# Code-First 无法识别数据注释
问题描述
当我使用Update-Database
时,它通常运行得很好,并且我在 SQL 端看到了我的更改。当我创建模型时,所有属性都已使用Required
,但删除此注释后,映射列仍然是not null
. 我已经通过添加和删除列来测试我的迁移设置,这工作正常。
我的模型是这样的:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Company.Employees {
[Serializable]
[Table("EmployeeRecords")]
public class EmployeeRecords {
[Key]
[Required]
public Guid EmployeeID { get; set; }
[Required]
[Display(Name = "Date Submitted")]
public DateTime DateSubmitted { get; set; }
[Display(Name = "Date Processed")]
public DateTime? DateProcessed { get; set; }
[Required]
[Display(Name = "Submitted By")]
public string SubmittedBy { get; set; }
[Required]
[Display(Name = "Employees")]
public Int16 Employees { get; set; }
[Required]
[Display(Name = "Total Wages")]
public decimal TotalWages { get; set; }
[Required]
[Display(Name = "Total Benefits")]
public decimal TotalBenefits { get; set; }
public List<EmployerReference> EmployerReferences { get; set; }
}
}
你会看到属性DateProcessed
不是[Required]
. 但 EF 没有看到这一点。
我还使用其他数据注释进行了测试。我添加[MaxLength(450)]
,然后运行更新数据库。这行得通,在 SQL 中,映射列更改为VARCHAR(450)
有可能我已经走了,这是我第一个使用代码优先的应用程序。如果需要更多信息,请告诉我。谢谢!!
编辑:
我刚刚尝试使用这样的 Fluent API:
modelBuilder.Entity<RemittanceBatch>().Property(m => m.DateProcessed).IsOptional();
base.OnModelCreating(modelBuilder);
这也不起作用。
编辑2:
它允许我使该DateSubmitted
字段可以为空。但不允许我使该DateProcessed
字段可为空。这里有什么区别......嗯
解决方案
所以,我可能永远无法弄清楚真正的问题是什么。在这一点上,我愿意将其称为错误。这是修复它的方法。
- 从模型中删除属性
- 运行
Update-Database
。 - 再次添加属性
- 运行
Update-Database
。
魔法!有用!
推荐阅读
- ios - 我有一个故事板,我推动这个。我想在启动控制器之前获取情节提要上的控件名称。如何?
- javascript - 数据表 - 仅搜索数据属性
- c# - 在没有 Resharper 的情况下提取重构 Visual Studio 2019
- http - 内部依赖失败的 HTTP 状态码
- java - 当我们在 url 路径参数中传递 # 而不是 Integer 时,为什么它接受 '#' 代替 Integer?
- ios - How to send string data to UIButton tag?
- angular - 如何从量角器 API 获取查询参数
- typescript - 为什么引用非导出类不会产生编译错误?
- azure - 具有多因素身份验证的 Azure Active Directory B2C - 查询以集成到网站中
- wordpress - wordpress 无法上传图片,但是有些图片被上传了