如何在asp.net mvc中使用生成的DbContext验证EF 4.0模型?

时间:2011-10-18 02:16:35

标签: asp.net asp.net-mvc validation entity-framework-4 entity-framework-4.1

好的,所以我仍然想使用EF 4.0的模式模型,但我也想要EF 4.1的API和灵活性。

因此,在我的应用程序中,我添加了当前EF 4.0模型中的DbContext生成代码。

现在,我的问题是我可以选择验证我的DbSet(EF 4.1)模型而不会让它们消失吗?

DataAnnotation似乎没有削减它,因为每次我更新我的视觉模型时,它都会完成所有修改。

  • 我听说过部分课程,但这似乎非常混乱。
  • 我真的不想在我的控制器上进行验证。
  • 我想让这个可扩展,所以我可以轻松地将我的类从asp.net MVC转移到WPF等。

有办法做到这一点吗? 验证库?单独的验证层?存储库层内的验证?例子也将受到赞赏。

请帮帮我。谢谢:))

3 个答案:

答案 0 :(得分:1)

使用模板生成器,似乎可以执行以下操作之一:

  1. 为每个实体创建一个好友类,并通过在模板中命名约定来定义好友类。
  2. 通过将数据注释存储在单独的源或其他内容中来创建数据注释的方法。
  3. 或者,使用单独的图层。如果您使用的是存储库,则可以在那里嵌入验证。我选择了一个Orm Validation工厂,该工厂引入与实体匹配的规则(静态或动态),工厂完成工作(因为这更符合单一责任原则)。

    HTH。

答案 1 :(得分:1)

在我的项目中,我混合使用4.1和4.0上下文。可以进行缓慢的迁移。 还有一个实体框架4.1逆向工程师扩展,可以添加到visual studio。 (允许您通过代码生成poco对象+来自现有数据库的映射来使用4.1。)

我不建议创建一个从4.0公开edmx生成的模型的DbContext。您还失去了继承objectcontext / dbcontext,继承属性(行版本控制,等等)和控制poco对象的好处(生成非代码,因此您不必担心4.0中的partials + metadatatype属性)

您的问题与验证使用ef4.0创建的架构有关:

为了在更新模型时不会完全擦除数据注释,您需要使用MetadataType属性。

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

有一个例子

答案 2 :(得分:0)

我不知道为什么MS教程序员这样的坏习惯。特别是在EF 4.1中使用数据注释进行映射是非常愚蠢的设计决策(例如,Linq-to-SQL使用单独的属性设置,以便在映射和验证之间进行明确分离)。

数据注释用于验证来自用户输入的数据,用户输入是视图/控制器相关的东西,其中每个视图可能需要不同的验证规则=>如果要使用数据注释,则这些规则属于视图模型而不属于实体。

在视图和实体是1:1的最简单的情况下,您可以直接使用数据注释,但这对于最简单的应用程序而言,一旦您执行这样一个简单的应用程序,您很可能直接使用ASP.NET动态数据并让框架根据您的实体模型为您创建所有页面。

ASP.NET动态数据还显示了如何在buddy classes中为生成的实体应用数据注释。