Asp.net mvc 实体框架:将填充ASP.NET ModelState的业务逻辑放在何处?

Asp.net mvc 实体框架:将填充ASP.NET ModelState的业务逻辑放在何处?,asp.net-mvc,entity-framework-4,Asp.net Mvc,Entity Framework 4,我有一个使用实体框架进行数据持久化的站点。 我在许多实体上使用了buddy类系统来标记需要使用数据注释的字段。 ASP.NET MVC及其ModelState非常适合这种开箱即用的模式。 我的问题是,我有一些更复杂的验证- 是否有一种方法可以在buddy类中包含此业务逻辑,从而正确填充ModelState 这方面的一个例子是 如果字段X为一个值,则需要字段Y 逻辑可能比这更复杂 谢谢,您应该让实体自己实现IValidatableObject,然后使用迭代器为每个错误返回验证结果 或者,您可以创建

我有一个使用实体框架进行数据持久化的站点。 我在许多实体上使用了buddy类系统来标记需要使用数据注释的字段。 ASP.NET MVC及其ModelState非常适合这种开箱即用的模式。 我的问题是,我有一些更复杂的验证- 是否有一种方法可以在buddy类中包含此业务逻辑,从而正确填充ModelState

这方面的一个例子是 如果字段X为一个值,则需要字段Y

逻辑可能比这更复杂


谢谢,

您应该让实体自己实现
IValidatableObject
,然后使用迭代器
为每个错误返回
验证结果


或者,您可以创建自定义类级别的
ValidationAttribute
并将其应用于buddy类。

您应该让实体本身实现
IValidatableObject
,然后使用迭代器
为每个错误返回
验证结果


或者,您可以创建自定义类级别的ValidationAttribute,并将其应用于buddy类。

这可以通过编写来实现。但就我个人而言,我更喜欢框架而不是数据注释,因为它提供了一种更简洁、更容易的方式来表达自定义验证逻辑,即使在复杂的场景中也是如此。但就我个人而言,我更喜欢框架而不是数据注释,因为它提供了一种更简洁、更容易的方式来表达自定义验证逻辑,即使在复杂的场景中也是如此。

Fluent validation确实看起来很棒,可能是我将在下一个项目中使用的东西Fluent validation确实很棒,可能是我将在下一个项目中使用的东西项目走了IValidatableObject路线,它产生了一种魅力-感谢而不是IValidatableObject路线,它产生了一种魅力-感谢