Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向用户传播数据完整性验证错误的好方法/标准方法是什么?_C#_.net_Validation_Propagation - Fatal编程技术网

C# 向用户传播数据完整性验证错误的好方法/标准方法是什么?

C# 向用户传播数据完整性验证错误的好方法/标准方法是什么?,c#,.net,validation,propagation,C#,.net,Validation,Propagation,我正在使用ASP.NETMVC3开发一个数据驱动的web应用程序。我将使用NHibernate进行数据访问,但我的问题是语言不可知(适用于所有具有异常概念的语言) 我得出的结论是,对于提供的完整性机制不够灵活的安全和边缘情况,我最好在实际数据库和存储库实现中强制执行数据完整性规则,以检索所述数据 问题 我想我可能应该将上述验证封装在我的IRepository实现中。例如,使用自定义MVC验证属性来查询数据库进行验证在我看来是不自然的;这样的处理似乎最好留在其他地方 如果我在IRepository

我正在使用ASP.NETMVC3开发一个数据驱动的web应用程序。我将使用NHibernate进行数据访问,但我的问题是语言不可知(适用于所有具有异常概念的语言)

我得出的结论是,对于提供的完整性机制不够灵活的安全和边缘情况,我最好在实际数据库和存储库实现中强制执行数据完整性规则,以检索所述数据

问题

我想我可能应该将上述验证封装在我的IRepository实现中。例如,使用自定义MVC验证属性来查询数据库进行验证在我看来是不自然的;这样的处理似乎最好留在其他地方

如果我在IRepository实现中执行验证,我应该如何将其传播到调用上下文?

我看到一些选择:

  • 使用类似于
    ValidationException
    (或者如果它已经存在)的内容对
    异常
    进行子类化。提供用户友好的消息作为消息属性
上述内容很容易实现,但它假设调用上下文希望向用户显示文本。这也使得调用上下文很难提供本地化(我相信这是没有例外的——我讨厌在谷歌搜索之前尝试翻译!)

  • 与上面相同,但不是提供文本消息,而是提供
    ValidationException
    ,其中
    validationnum
    是描述主题模型错误的枚举
这允许调用上下文完全自由地解释错误。我倾向于使用这种方法,尽管它会用大量的枚举值污染代码


除了这些选项之外,还有其他更漂亮的选项吗?

根据体系结构,在域类型上实现
IDataErrorInfo
可能是一个选项;这允许您在对象和对象+成员级别指示失败,IIRC现在也由MVC自动处理(许多其他框架,如winforms等,多年来一直支持此功能)。

根据体系结构,在域类型上实现
IDataErrorInfo
可能是一个选项;这允许您在对象和对象+成员级别指示失败,IIRC现在也由MVC自动处理(许多其他框架,如winforms等,已经支持此功能很久了)