【问题标题】:Dynamic view models with validation带有验证的动态视图模型
【发布时间】:2012-03-01 13:04:48
【问题描述】:

所以我有一个充满产品的数据库,这些产品具有属性并且这些属性具有值。我需要能够将其重新创建为可用作视图模型的 C# 对象。

所以本质上我需要能够将我在数据库中的内容变成这样:

public class Product
{
    public object Attribute { get; set; }
}

我猜我将不得不为此使用反射或表达式树,但我不确定。我还需要对每个属性进行验证。我正在考虑使用一个名为 Clay 的框架来执行此操作,尽管我不知道我是否能够获得验证和/或能够将此视图模型 POST 回控制器。

有什么想法吗?

编辑:感谢大家的回答,但我一定没有说清楚我在寻找我的错。我正在研究使用 DynamicObject 从我在数据库中的数据创建一个对象。我只是不确定如何使用 DynamicObject 在运行时创建 DataAnnotations。

【问题讨论】:

标签: c# asp.net asp.net-mvc asp.net-mvc-3 dynamic


【解决方案1】:

瑞恩,

根据 LiquidPony 的评论,我会将 Entity 框架加入其中。使用 EF 有多种入口点,无论是数据库优先、模型优先还是代码优先。出于您的目的,首先使用数据库将是最合适的。基本上,您只需将 edmx 设计器画布指向您的数据库连接,然后将您需要的表格“拖”到表面上。然后,这会创建所需的实体类,这些实体类可以使用 linq 在您的服务层/控制器中使用。

这里的美妙之处在于您的所有外键关系都得到了正确表示,您可以相对轻松地访问子集合等。

在 EF 之前,我确实使用 T4 模板和反射来输出我的数据库映射类,尽管这是一个“成功”,但它也是一个持续的维护噩梦,因为如果数据库发生变化,我必须记住添加新属性等等。使用 EF,您只需按“刷新”,这一切都为您完成。现在,如果这是一个新建项目,您可以“更好地”迈出一步并使用 EF Code-First。这允许您手动创建域模型并围绕模型的要求生成数据库。这在创建被设计为更大系统的一部分的自包含组件的领域内具有真正的优势。

见:

Code-first vs Model/Database-first

和:

http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx

关于每种方法的精彩总结。

希望这能提供一些见解。

【讨论】:

    【解决方案2】:

    如果您使用的是 MVC3,那么我看到的典型方法是使用实​​体框架和不显眼的 Javascript/DataAnnotations 进行验证。

    Validation教程

    MVC3 + EF4教程

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 2021-08-22
      • 2010-11-18
      • 2011-04-04
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多