MVC2模型设计相关问题

时间:2011-06-03 05:04:01

标签: asp.net entity-framework asp.net-mvc-2

我在asp.net MVC2应用程序中工作,我有与模型设计有关的问题。我有一个edmx文件,其中包含所有实体。我有一个名为whiteoutviewmodel的视图模型,它使用三个实体列表和三个其他集合,如下所示:

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;}
    }

我已根据此Viewmodel创建了一个视图。现在我需要一个应该是类型的局部视图 白茫茫。我创建了一个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中的属性。我应该将我的whiteout类作为上面ViewModel的属性吗?

[编辑]

我有一个viewoutodel,其中包含whiteout(edmx)列表,我还需要单个Whiteout,所以我的viewmodel可以这样:

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;} 
}

我也希望我的类型为Whiteout的主视图作为myWhiteout类型的部分视图。是否可能并且是良好的做法。我可以将mywhitout从主视图传递到主视图为Whiteouts类型的局部视图。

现在我的部分视图包括这样:

Html.RenderPartial("WhiteoutList", Model); 

请建议

2 个答案:

答案 0 :(得分:1)

我尝试将视图与数据访问相关的任何内容完全分开,这包括由ORM生成的任何内容。

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

想象一下登录页面, 您有一个由实体框架生成的用户,然后您需要某种介体对象,它将从您的视图中来回传输数据。话虽如此,您不希望从Entity Framework为您生成的User类创建强类型视图。

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

发生的问题和丑陋的管道代码是您现在必须手动将LoginUserViewModel中的属性映射到User。

你能做的就是使用类似AutoMapper的东西,这样可以让事情变得更加清洁和轻松。

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

答案 1 :(得分:0)

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

Public partial class Whiteout{

    Public string NewStringProperty{get;set;}

}