我首先使用带有数据库的 EF 4.1。
示例表:
CREATE TABLE dbo.Foo(
[ID] [int] IDENTITY(1,1) NOT NULL,
Created datetime not null default(getdate()),
Title varchar(80) not null
PRIMARY KEY CLUSTERED ([ID] ASC)
)
EF 将所有 3 列正确加载为 nullable = false 的模型。
代码生成项“ADO.NET DbContext Generator”的输出:
public partial class Foo
{
public int ID { get; set; }
public System.DateTime Created { get; set; }
public string Title { get; set; }
}
在 MVC3 中,我FooController
通过 db 上下文和 foo 模型生成。当我打开 /Foo/Create 并在空白表单上点击“Create”时,它会在“Created”字段上显示验证错误,但在“Title”上却没有。
如果我只输入“创建”日期,则会出现异常:
一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性
例外是“标题字段是必需的”。
我不确定为什么它适用于一列但不适用于另一列。我的第一个修复是简单地添加注释,但是类代码是由 EF 自动生成的。
唯一可行的修复方法是使用部分元数据类:ASP.NET MVC3 - Data Annotations with EF Database First (ObjectConext, DbContext)
我可以根据需要添加 [Required] 标签,但这应该是不必要的。这是 EF 中的错误还是我只是遗漏了什么?