使用数据注释以编程方式验证?

时间:2015-04-26 23:43:13

标签: c# entity-framework data-annotations validationattribute

我有一个实体子类的属性,我想验证它是否为null。

我无法使用[Required]属性对其进行注释,因为EF解析器会根据需要对其进行解释。我只希望这种类型需要它(它是一个继承的实体)。

我在项目中使用显示资源,我希望从资源中检索属性名称和错误消息。

实体实现IValidatableObject,因此我想添加Validator.TryValidateObject并自动获取自定义验证错误,但它需要ValidationContext的{​​{1}}实例,我想要Dictionary<object, object>使用,需要Validator,我不确定它需要什么参数。我确定这是我正在寻找的构造函数,因为我正在寻找一种方法来指定实例和成员名称,以便验证器自动提取显示变量。

我不介意这样做是以任何其他方式,但我更喜欢开箱即用的方式,系统关心格式化验证错误与属性的显示名称和从中获取的错误消息资源。

无论如何,我想问一下,ValidationContext类如何在内部获取显示名称?这个功能有什么暴露吗?
另一个问题是MemberName如何在内部设置ValidationContext?我可以自己构建这样一个ServerConnectionString吗?

1 个答案:

答案 0 :(得分:1)

看起来我没有意识到,但 let myCertificate = [ 103, 92, -99, 33, 72, 48, 119, -72, -77, 75, -88, 81, 113, -46, -119, -119, 5, 42, -33, 94, 23, 3, -112, 34, -63, 75, -77, 26, -41, -69, 50, 71, 19, 121, 109, -60, 40, 18, 46, -86, ........................] var certificate = NSData(bytes: myCertificate as [Byte], length: myCertificate.count) 属性是可读写的。

我最终使用了以下内容:

ValidationContext.MemberName

我可以做的另一个选择是在public IEnumerable<ValidationResult> IValidatableObject.Validate( ValidationContext validationContext) { var context = new ValidationContext(this) { MemberName = nameof(BirthDate) }; var dateResults = new List<ValidationResult>(); if (!Validator.TryValidateValue(this.BirthDate, context, dateResults, new[] { new RequiredAttribute { ErrorMessageResourceType = typeof(ValidationResx), ErrorMessageResourceName = Resx.Required } })) foreach (var dateResult in dateResults) yield return dateResult; } 的流畅API中将属性设置为NotRequired