在由VS生成的实体类和用于特定数据显示的视图模型类之间混淆

时间:2014-04-21 21:37:10

标签: c# asp.net-mvc entity-framework asp.net-mvc-4

我是MVC4的新手,最近几天我正在开发一个MVC项目。我正在使用Entity Framework。我正在使用数据库第一种方法。所以我使用VS功能自动生成基于模式的实体类。之前我曾在stackoverflow上询问过以下问题:Can I project the result of my query to the model generated by EF?   给出的建议主要基于创建View Model类。 我对创建View Model类所获得的好处感到困惑,除了Projecting我自己选择的列。 对于CreationDeletionUpdate,生成的实体类工作正常。只有在必须向用户显示记录列表时才使用View Model类。另请注意,我的VM classes几乎与生成的Entity Classes重复。

我经常遇到以下问题:

        [HttpPost]
        [ActionName("Edit")]
        public ActionResult EditService_POST(SERVICES service)
        {
            DAL lib = new VFS_DAL();
            int state = lib.UpdateService(service);

            if (state == 1)
            {
                return RedirectToAction("Details", new { service_name = service.NAME });
            }
            else
            {
                return View("Error");
            }
        }

        [HttpGet]
        [ActionName("Edit")]
        public ActionResult EditService(string service_name)
        {
            DAL lib = new DAL();

            ServicesVM service = lib.GetServiceDetails(service_name); // This method Returns Object of TYPE ServicesVM which I had created for displaying service details, But for Editing I need Object of type Context_Services so I had to write another method that returns object of type Context_Services. Both are same and cause code redundancy. 

            return View("EditService",service);
        }

我该如何处理这种情况。仅仅为了显示几个选定的列,我必须创建Vew Model类,或者还有它的其他用途?

我如何处理上述情况,以便我不会遇到在实体框架生成的类和视图模型类之间切换的问题,这基本上是代码重复。 这方面的最佳做法是什么。

欢迎任何书籍和链接等阅读建议。 谢谢。

1 个答案:

答案 0 :(得分:0)

视图模型应该反映用于验证的数据属性,这些属性可能对基础实体框架类有用,也可能没用。由于某些情况下的类是相似的,或者可以使用相同的自动映射器在实体框架类和视图模型类之间进行映射。