我知道有可能manually add attributes to entity properties,但实体框架可以为我生成这个吗?例如,它知道最大长度为6(如果您查看实体设计器中的属性)。
现在发生的事情是我收到了一条令人讨厌的通用错误消息,但没有显示该字段的长度。
我想我需要在MVC实体框架中接受培训,我应该在截止日期之间的某个地方进行培训。 : - )
答案 0 :(得分:1)
您可以通过创建自己的T4模板来实现这一目标。
但是,验证是我单独在您的数据层中所做的事情,尤其是在您的业务层中。毕竟,它不仅是一个重要的字段的最大长度,而且它是否是强制性的,特定范围内的数字,依赖于其他实体的验证,等等。并非每个验证/业务规则都可以自动生成,因为它主要还取决于上下文。根据您的体系结构,您可以例如,如果未满足要求,则不允许创建对象。
进行此类验证的一个很好的框架是FluentValidation。它允许您在不同的类中隔离验证;甚至重复使用它们。
您的数据层可能负责数据验证,例如检查外键或其他约束。
答案 1 :(得分:1)
创建方法:
如果是“数据库优先”,则应为constraint。检查发生在数据库中。
CREATE TABLE suppliers
(
supplier_id numeric(4),
supplier_name varchar2(50),
CONSTRAINT check_supplier_id
CHECK (supplier_id BETWEEN 100 and 9999)
);
示例:source
如果是模型,首先使用注释或验证类。示例Fluent valitation
public class CustomerValidator: AbstractValidator<Customer> {
public CustomerValidator() {
RuleFor(customer => customer.Surname).NotEmpty();
RuleFor(customer => customer.Forename).NotEmpty().WithMessage("Please specify a first name");
RuleFor(customer => customer.Discount).NotEqual(0).When(customer => customer.HasDiscount);
RuleFor(customer => customer.Address).Length(20, 250);
RuleFor(customer => customer.Postcode).Must(BeAValidPostcode).WithMessage("Please specify a valid postcode");
}
private bool BeAValidPostcode(string postcode) {
// custom postcode validating logic goes here
}
}
示例:source
如果代码优先,您可以添加属性约束:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>().Property(p => p.BloggerName).HasMaxLength(10);
}
示例:source