带验证的动态视图模型

本文关键字:视图 模型 动态 验证 | 更新日期: 2023-09-27 18:23:47

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

因此,从本质上讲,我需要能够将数据库中的内容转换为以下内容:

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

我想我将不得不使用反射树或表达式树,但我不确定。我还需要包括对每个属性的验证。我正在考虑使用一个名为Clay的框架来实现这一点,尽管我不知道我是否能够获得验证和/或将该视图模型POST返回到控制器。

有什么想法吗?

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

带验证的动态视图模型

Ryan,

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

这里的美妙之处在于,你所有的外键关系都得到了正确的表达,你可以相对轻松地访问儿童收藏等。

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

参见:

代码优先与模型/数据库优先

和:

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

对每种方法都有很好的总结。

希望这能给我们一些启示。

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

验证教程

MVC3+EF4教程