【问题标题】:How to validate EF 4.0 model with generated DbContext in asp.net mvc?如何在 asp.net mvc 中使用生成的 DbContext 验证 EF 4.0 模型?
【发布时间】:2011-10-18 16:28:05
【问题描述】:

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

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

现在,我的问题是,我有哪些选项可以验证我的 DbSet (EF 4.1) 模型而不会被清除?

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

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

有没有办法做到这一点? 验证库?单独的验证层?存储库层内的验证?示例也将不胜感激。

请帮助我。谢谢:)

【问题讨论】:

  • 人们怎么还能绑定到数据模型……这让我很吃惊。使用视图模型!这并不难......

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


【解决方案1】:

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

  1. 为每个实体创建一个伙伴类,并通过模板中的命名约定定义伙伴类。
  2. 想办法生成数据注释,将它们存储在单独的源或其他东西中。

或者,使用单独的图层。如果您使用的是存储库,则可以在其中嵌入验证。我选择了一个 Orm 验证工厂,它引入与实体匹配的规则(静态或动态),然后工厂完成工作(因为这更符合单一责任原则)。

HTH。

【讨论】:

  • 介意你能给我一个更清晰的图片吗?也许有一些代码?我不知道如何实现你在这里描述的 orm 验证工厂..
【解决方案2】:

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

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

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

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

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

有一个例子

【讨论】:

    【解决方案3】:

    我不知道为什么 MS 会教程序员这些坏习惯。尤其是在 EF 4.1 中使用数据注释进行映射是非常愚蠢的设计决策(例如,Linq-to-SQL 使用单独的属性集来明确区分映射和验证)。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2011-03-04
      • 2011-12-24
      相关资源
      最近更新 更多