C# 使用N层实体框架在WinForms中显示数据批注错误消息
请注意,我将N层实体框架()与(WCF)SmartClient Winforms应用程序一起使用。使用数据注释来执行客户端验证,我希望(模仿MVC)选择在用户键入值时立即向用户显示数据注释错误消息,和/或选择在用户单击“保存”按钮时等待显示所有实体属性的所有错误消息(可能使用Validator.TryValidateObject),但在调用context.SaveChanges()之前 当前,当属性值更改并且用户尝试更改控制焦点时,将执行Entity OnPropertyChange()方法,检查属性是否有效(ValidateProperty()),如果验证失败(由于数据注释)抛出异常,控件不会失去焦点,但不会传递/显示异常/错误消息 如何获取可用于客户端验证的数据批注错误消息C# 使用N层实体框架在WinForms中显示数据批注错误消息,c#,entity-framework,data-annotations,n-tier-architecture,client-side-validation,C#,Entity Framework,Data Annotations,N Tier Architecture,Client Side Validation,请注意,我将N层实体框架()与(WCF)SmartClient Winforms应用程序一起使用。使用数据注释来执行客户端验证,我希望(模仿MVC)选择在用户键入值时立即向用户显示数据注释错误消息,和/或选择在用户单击“保存”按钮时等待显示所有实体属性的所有错误消息(可能使用Validator.TryValidateObject),但在调用context.SaveChanges()之前 当前,当属性值更改并且用户尝试更改控制焦点时,将执行Entity OnPropertyChange()方法,检
@Christofsen您有什么建议吗?N-Tier实体框架提供多种验证机制:
在您的情况下,我假设您需要设置IsValidationEnabled=false,因为othervise WinForms数据绑定首先无法设置无效值,然后使用IDataErrorInfo接口无法返回任何验证错误,因为该值未实际设置。DataContext、EntitySet和Entity上都有IsValidationEnabled属性级别。@Christofsen我感谢您的回复 1) 为了利用控件/属性的早期验证,我们使用BindingSource控件的BindingComplete事件来显示验证异常(数据注释错误消息) 2) 为了利用IDataErrorInfo,我们设置了IsValidationEnabled=false,并编写了以下代码以获取数据注释错误消息字符串。请让我知道是否有其他方式使用IDataErrorInfo context.EntitySet.IsValidationEnabled=false
NTier.Common.Domain.Model.Entity tempEntity=(NTier.Common.Domain.Model.Entity)entityName; 字符串errorMessages=((System.ComponentModel.IDataErrorInfo)tempEntity)错误; //其中errorMessages包含一个数据注释错误消息字符串
3) 通过使用entity.ValidateProperty(propertyName,propertyValue)并捕获异常,我们可以成功获取数据批注错误消息。如果您使用Winforms并希望自定义绑定,则需要更改属性DataSourceUpdateMode.OnPropertyChanged。见答案