asp.net-mvc-3 - 使用 IEnumerable 在域模型和 View 模型之间进行映射

标签 asp.net-mvc-3 linq-to-sql model

所以我的域模型有一个名为 Children 的属性它返回带有当前对象 ID 的所有菜单。我想创建一个 View 模型并在 Controller 中映射它们之间的值。所以Children属性是 IEnumerable<MenuModel>menu.Children类型为IEnumerable<MenuCache> 。最简单的方法是什么?我是否需要遍历所有子项并将它们手动添加到当前模型中,然后对所有级别重复此操作?

型号:

public class MenuModel
{
    public int ID { get; set; }

    public string URL { get; set; }

    public int ParentID { get; set; }

    public IEnumerable<MenuModel> Children { get; set; }
}

Controller :

using (var context = ww.WebObjs.WebDataContext.Get())
{
    var menu = context.MenuCaches.Where(x=> x.ID == 0).FirstOrDefault();
    model = new MenuModel()
    {
        ID = menu.ID,
        URL = menu.Text,
        ParentID = menu.ParentID,
        Children = menu.Children // how do I get those children?
   };
}

最佳答案

您可以使用 LINQ:

using (var context = ww.WebObjs.WebDataContext.Get())
{
    var menu = context.MenuCaches.Where(x => x.ID == 0).FirstOrDefault();
    model = new MenuModel()
    {
        ID = menu.ID,
        URL = menu.Text,
        ParentID = menu.ParentID,
        Children = menu.Children.Select(x => new MenuModel
        {
            Prop1 = x.Prop1,
            Prop2 = x.Prop2,
            // and so on ...
        })
   };
}

AutoMapper我强烈推荐。因此,在定义相应的映射后,您的 Controller 操作将变得更具可读性:

using (var context = ww.WebObjs.WebDataContext.Get())
{
    var menu = context.MenuCaches.Where(x => x.ID == 0).FirstOrDefault();
    model = Mapper.Map<MenuCache, MenuModel>(menu);
}

关于asp.net-mvc-3 - 使用 IEnumerable 在域模型和 View 模型之间进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115764/

相关文章:

ruby-on-rails - 从 View 中调用模型中的方法

asp.net-mvc-3 - 管理开发和生产之间的 EF Code First 迁移

c# - 为什么从 mvc 返回 json 时 IgnoreDataMember 属性不起作用?

c# - 数据过滤是否发生在 Controller 、服务或存储库层?

c# - 使用 C# Linq 连接行

java - 我只想在少数情况下忽略 JSON 中的字段,这可能吗?

c# - MVC ListBox 多项选择在发布时 Controller 中只有一个值

c# - entityframework 已经有一个与此命令关联的打开的 DataReader,必须先将其关闭

c# - 在 LINQ to SQL 中处理 DataContext 的最佳方式

ruby-on-rails - 如何存储和使用算法?