如果我将[Required]
属性放在模型中的属性上,那么如果没有提供值,<input>
helper标记将抛出验证错误,但它也将影响数据库结构。
但是
modelBuilder.Entity<CartItem>(e =>
{
e.Property(e=>e.Quantity).IsRequired();
}
做同样的事?意思是这是否会导致以某种方式动态地将[Required]
属性添加到属性中,以便<input>
标签助手可以注意到它?
"意思是这会导致动态添加[必选]属性,以便标签帮助器可以注意到它?">
是的,正是这样。IsRequired
和[Required]
最终将对数据库模式产生相同的影响,因为它将在表列上添加non-nullable
约束。意味着财产是强制性的。关键的区别是我们只能使用流畅的API验证代码的第一种方法,而[Required]
的所有方法。
事实上,虽然使用e.Property(e=>e.Quantity).IsRequired() attribute
流畅的API而不是注释来获得相同的客户端&服务器端验证。而不是使用Required
。问题是,基于Fluent API配置抛出的验证错误不会自动到达UI,但您可以在代码中捕获它,然后相应地响应它。此外,你可以在这里查看官方文件