使用n层实体框架在WinForms中显示数据注释错误消息
本文关键字:数据 显示 注释 错误 消息 WinForms 实体 框架 使用 | 更新日期: 2023-09-27 18:10:55
请注意,我正在使用n层实体框架(http://ntieref.codeplex.com/)与(WCF) SmartClient Winforms应用程序。使用数据注释来执行客户端验证,我想(模仿MVC)选择在用户输入值时立即显示数据注释错误消息,和/或选择等待,当用户单击保存按钮时显示所有实体属性的所有错误消息(可能使用Validator.TryValidateObject),但在调用context.SaveChanges()之前。
当前,当属性值改变并且用户试图改变控件焦点时,执行Entity OnPropertyChanging()方法,检查属性是否验证(ValidateProperty()),如果验证失败(由于数据注释),则抛出异常,控件不会失去焦点,但不会传递/显示异常/错误消息。
如何获得数据注释错误消息可用于客户端验证?
@ChristofSenn你有什么建议吗?N-Tier实体框架提供多种验证机制:
- 在设置属性值时执行的早期验证,如果无效则抛出并防止实际设置无效值(这是默认启用的)
- IDataErrorInfo允许您验证属性的当前值(需要IsValidationEnabled=false才能在属性上实际设置无效)
- ValidateProperty(字符串propertyName,对象值)允许验证值而不实际尝试将值应用于属性。
在你的情况下,我认为你需要设置IsValidationEnabled=false,否则WinForms DataBinding无法首先设置无效值,然后使用IDataErrorInfo接口不返回任何验证错误,因为值实际上没有设置。属性IsValidationEnabled在DataContext, EntitySet和Entity级别可用。
@ChristofSenn感谢您的回复。
1)为了利用控件/属性的早期验证,我们使用BindingSource控件的BindingComplete事件来显示验证异常(数据注释错误消息)。
2)为了利用IDataErrorInfo,我们设置了IsValidationEnabled=false,并编写了以下代码来获取数据注释错误消息的字符串。请让我知道是否有一种不同的方式来利用IDataErrorInfo。
context.EntitySet。
tempEntity = (NTier.Common.Domain.Model.Entity)entityName;string errorMessages = ((System.ComponentModel.IDataErrorInfo) tempEntity).Error;//其中errorMessages包含一个数据注释错误消息字符串。
3)我们可以使用实体成功获取数据注释错误消息。ValidateProperty(propertyName, propertyValue)和捕捉异常