2011-06-03 57 views
0

我在asp.net MVC2应用程序中工作,我有模型设计相关的问题。我有一个包含所有实体的edmx文件。我有一个视图模型命名whiteoutviewmodel它采用实体的三个单等三个集合是这样的:MVC2模型设计相关问题

public class WhiteoutViewModel 
    { 
     public List<Entities.Server> Servers { get; set; }  
     public List<Entities.Whiteout> Whiteouts { get; set; } 
     public List<Entities.Field> Fields { get; set; } 

     public ArrayList Hours {get;set;} 
     public ArrayList Minutes {get;set;} 
     public ArrayList AMPM {get;set;} 
     public ArrayList RepeatList{get;set;} 
    } 

我创建基于此视图模型视图。现在我需要一个局部视图,它应该是 型号。我创建了一个whiteout类并在其中添加了一些属性。

public class WhiteoutDTO 
    { 
     public int WhiteoutId { get; set; } 
     public int FieldId { get; set; } 

     public int StartHour { get; set; } 
     public int StartMinute { get; set; } 
     public string StartTime { get; set; } 

     public int EndHour { get; set; } 
     public int EndMinute { get; set; } 
     public string EndTime { get; set; } 

     public string Repeats { get; set; } 
     public bool IsActive { get; set; } 

     public enmDays Days { get; set; } 
    } 

现在我有两个Whiteout类。一个来自edmx,一个来自我创建的。我是否需要对edmx类型或我创建的类型进行局部视图?我创建我的类的原因是我需要一些不在数据库表/ edmx中的属性。我应该让我的whiteout类作为以上ViewModel的属性吗?

[编辑]

我有有whiteouts列表(EDMX)一个视图模型,我还需要一个白化,所以我的视图模型可以有这样的:

public class viewmodel { 
    // of edmx entity type 
    public List<Entities.Whiteout> Whiteouts { get; set; } 
    // of my DTO type where my DTO has some properties which are not in edmx whiteout entity 
    public WhiteoutDTO myWhiteout {get;set;} 
} 

我也想我的主要观点类型为Whiteouts的地方,这是我的myWhiteout类型的部分视图。这是可能的,而且是很好的做法。我可以将mywhitout从主视图传递到主视图为Whiteouts类型的局部视图。

现在我已经包含了这样的局部视图:

Html.RenderPartial("WhiteoutList", Model); 

请建议

回答

1

我尝试保持视图完全独立于与数据访问相关的任何东西,这包括ORM生成的任何东西。

你想要的是保持你的意见尽可能愚蠢。 ViewModels只是为了给你的视图提供它需要的东西,作为回报,给你一些关于用户可能输入的数据的信息。

想象一下第二个登录页面, 您有一个由Entity Framework生成的用户,然后您需要某种中介对象,它将从您的视图中来回传输数据。这就是说,你不希望从Entity Framework中为你生成的User类创建一个强类型视图。

您想要创建一个LoginUserViewModel,只需足够的信息让视图能够登录用户并将信息发回服务器以进行身份​​验证和授权。

发生问题和难看的管道代码是您现在必须手动将属性从LoginUserViewModel映射到用户。

你可以做的是使用类似AutoMapper的东西,它使事情变得更加简单和容易。

AutoMapper.Mapper.Map<AccountLoginViewModel, User>(accountLoginViewModel, user); 
+0

我已经更新了这个问题。请查看ViewModel的详细信息 – DotnetSparrow 2011-06-03 05:45:13

0

您可以通过使用部分类扩展模型:

Public partial class Whiteout{ 

    Public string NewStringProperty{get;set;} 

}