Entity framework 使用存储库模式验证ASP.NETMVC3中实体框架实体的最佳实践?

Entity framework 使用存储库模式验证ASP.NETMVC3中实体框架实体的最佳实践?,entity-framework,validation,asp.net-mvc-3,Entity Framework,Validation,Asp.net Mvc 3,我发现有几次我们向一些实体添加了新属性,尽管我们一直在更新验证逻辑(目前只在服务类中)但是我们忽略了更新逻辑中的一部分,在服务类中,我们从存储库中检索绑定,并将repo中实体的所有属性设置为模型,然后尝试保存。结果是,新字段永远不会保存,因为我们忘记了在更新逻辑中进行赋值 控制器类有一个很好的UpdateModel(model)方法,它将为您完成所有工作,并确保它获得所有属性。这非常有效,但它并没有解决额外验证的问题,也没有解决服务从repo获取实体的问题 在您希望使用UpdateModel方法

我发现有几次我们向一些实体添加了新属性,尽管我们一直在更新验证逻辑(目前只在服务类中)但是我们忽略了更新逻辑中的一部分,在服务类中,我们从存储库中检索绑定,并将repo中实体的所有属性设置为模型,然后尝试保存。结果是,新字段永远不会保存,因为我们忘记了在更新逻辑中进行赋值

控制器类有一个很好的UpdateModel(model)方法,它将为您完成所有工作,并确保它获得所有属性。这非常有效,但它并没有解决额外验证的问题,也没有解决服务从repo获取实体的问题

在您希望使用UpdateModel方法、希望进行验证并尝试坚持存储库模式的场景中,最佳实践是什么。我故意省略了服务类,因为我不介意放弃它。这似乎是一个非常麻烦的方法,因为它的价值。

你看过了吗,它是针对这类事情的。

你看过了吗,它是针对这类事情的。

你可以在实体类和/或视图模型中实现接口

EF4.1和MVC 3都知道这个接口

MVC将在UpdateModel方法中调用moethod,如果有任何验证错误,它将抛出异常。MVC甚至会将验证错误放在视图上

EF还将在保存插入和更新之前调用此方法

您可以将所有复杂的验证规则(不能使用数据注释声明)放在方法中

您可以在实体类和/或视图模型中实现接口

EF4.1和MVC 3都知道这个接口

MVC将在UpdateModel方法中调用moethod,如果有任何验证错误,它将抛出异常。MVC甚至会将验证错误放在视图上

EF还将在保存插入和更新之前调用此方法


您可以将所有复杂的验证规则(不能使用数据注释声明)放在方法中

为什么不能使用与MVC很好集成的现有数据注释


如果您不想依赖现有的模型绑定来为您设置此信息,那么调用TryUpdateModel将更新您的modelstate,然后您可以使用modelstate.IsValid。

有什么原因不能使用与MVC很好集成的现有数据注释吗


如果您不想依赖现有的模型绑定来为您设置此信息,那么调用TryUpdateModel将更新您的modelstate,然后您可以使用modelstate.IsValid。

但是实体框架会自动生成其类,并在每次更新模型时删除我的代码。好的,等等,我看到生成的类是部分类。我将继续调查。但是实体框架自动生成它的类,并且每次我更新模型时都会删除我的代码。好的,等等,我看到生成的类是一个部分类。我会继续调查。