我正在创建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项目完全分开。
有什么想法吗?
答案 0 :(得分:1)
我建议创建一个视图模型,这样你就可以用视图相关的东西(即UIHint)来装饰属性。此外,此视图模型将是类的简化版本(例如,它只能包含相关对象的id而不是整个对象),这使得它更容易用作动作参数。
另外,你在这里讨论的是对象,尽量不要考虑“数据”。
答案 1 :(得分:1)
MVC确实需要重命名为VMVC - ViewModel View Controller。
MVC中的模型与EF,Persistence或您的域无关。它们是视图中表示/需要的多个数据/设置/事物源的组合。
因此,为您的视图创建新的视图模型。
修改强> 的
所有使用EF Code First Models作为视图模型的示例/教程都是可怕的教程/示例。他们教你不好的做法,因为在现实世界中,你永远不会,也不应该直接在你的视野中使用它们。
ViewModel是进入视图的数据的组合或聚合。例如:
如果您有产品详细信息页面,则可能会从数据库获取产品信息,从Web服务获取产品的可用性,从某个缓存中获取购物车。
这些将组成一个ViewModel,它代表您正在显示的视图。并呈现。
不应在视图之间共享ViewModel,因为如果更改ViewModel,则更改共享该视图模型的视图的含义。