所以我有一个数据库,其中包含具有属性且这些属性具有值的产品。我需要能够将其重新创建为C#对象,我可以将其用作视图模型。
基本上我需要能够将数据库中的内容转换为:
public class Product
{
public object Attribute { get; set; }
}
我猜我必须使用反射或表达树,但我不确定。我还需要在每个属性上包含验证。我正在考虑使用一个名为Clay的框架来执行此操作,但我不知道我是否能够获得验证和/或能够将此视图模型回发回控制器。
有什么想法吗?
编辑:感谢大家的答案,但我一定不清楚我在寻找我的错...我正在研究使用DynamicObject从数据库中的数据创建一个对象。我只是不确定如何使用DynamicObject在运行时创建DataAnnotations。答案 0 :(得分:1)
瑞恩
根据LiquidPony的评论,我将实体框架纳入其中。使用EF有很多切入点,数据库优先,模型优先或代码优先。出于您的目的,数据库优先是最合适的。基本上,您只需将edmx设计器画布指向数据库连接,然后将所需的表“拖动”到曲面上。然后,这将创建所需的实体类,可以使用linq使用服务层/控制器来消费。
这里的美妙之处在于您所有的外键关系都得到了恰当的表达,您可以相对轻松地访问子集等。
在EF之前,我确实使用T4模板和反射来输出我的数据库映射类,虽然这是一个“成功”,但它也是一个持续的维护噩梦,因为我不得不记得如果数组更改时添加新属性使用EF,您只需按“刷新”即可完成所有操作。现在,如果这是一个绿地项目,你可以更好地迈出一步,并使用EF Code-First。这允许您手动创建域模型,并围绕模型的要求生成db。这在创建自包含组件的领域中具有真正的优势,这些组件被设计为更大系统的一部分。
见:
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
了解每种方法的精彩摘要。
希望这能提供一些见解。
答案 1 :(得分:0)
如果你正在使用MVC3,那么我看到这种方式的典型方法是使用Entity Framework和Unobtrusive Javascript / DataAnnotations进行验证。