使用MVC 4&创建n-tiered EF 5

时间:2013-08-29 00:37:06

标签: asp.net-mvc-4

我正在创建n层应用程序,我将有两个单独的项目

1) project EF (where it will have all my edmx...)
2) project MVC 4 (internet application.)

在我的EF中,我有.edmx文件,它会生成几个带有所有道具的类,如下所示(作为示例)......

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
    public partial class Requester
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        <//more...........>
    }
到目前为止一切都很好!!

Back to MVC project

现在我将在我的MVC项目中创建一个新的Controller,当我尝试创建Scaffolding并提供Controller名称时,Controller期望Model所以真正的问题是:

我应该在Model通过什么? 我应该和EF创建的课程相同吗?或者我应该在我的“模型文件夹”(MVC)中创建另一个Model并绑定它?如果是,那么如果我继续在MVC模型文件夹项目中创建相同的模型,我不会创建重复属性吗?

我想做什么? :我的这个练习的目的是让我的数据访问层(DAL)与MVC项目完全分开。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我建议创建一个视图模型,这样你就可以用视图相关的东西(即UIHint)来装饰属性。此外,此视图模型将是类的简化版本(例如,它只能包含相关对象的id而不是整个对象),这使得它更容易用作动作参数。

另外,你在这里讨论的是对象,尽量不要考虑“数据”。

答案 1 :(得分:1)

MVC确实需要重命名为VMVC - ViewModel View Controller。

MVC中的模型与EF,Persistence或您的域无关。它们是视图中表示/需要的多个数据/设置/事物源的组合。

因此,为您的视图创建新的视图模型。

修改

所有使用EF Code First Models作为视图模型的示例/教程都是可怕的教程/示例。他们教你不好的做法,因为在现实世界中,你永远不会,也不应该直接在你的视野中使用它们。

ViewModel是进入视图的数据的组合或聚合。例如:

如果您有产品详细信息页面,则可能会从数据库获取产品信息,从Web服务获取产品的可用性,从某个缓存中获取购物车。

这些将组成一个ViewModel,它代表您正在显示的视图。并呈现。

不应在视图之间共享ViewModel,因为如果更改ViewModel,则更改共享该视图模型的视图的含义。