【问题标题】:MVC4 DTO's and Many to Many Relationships with extension methods for WebAPIMVC4 DTO 和多对多关系与 WebAPI 的扩展方法
【发布时间】:2013-06-17 21:34:55
【问题描述】:

在了解 DTO 和扩展方法如何处理 EF5 Code First MVC4 中的多对多关系时,我需要一些帮助。

我有以下 DTO

using System;
using System.Collections.Generic;
namespace Mirtol.Web.Models
{

public class TaskDetail
{
    public DateTime DueDate {get;set;}
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Status { get; set; }
    public string Phase { get; set; }
    public string Project { get; set; }
    public DateTime StartDate { get; set; }
    public string overdue { get; set; }

    public List<GroupDetail> Groups { get; set; }

}
}

using System;
namespace Mirtol.Web.Models
{

public class GroupDetail
{

    public string GroupName {get;set;}
    public string GroupDescription { get; set; }

}
}

除此之外,我还有以下扩展;

using Mirtol.Web.Models;
using System.Collections;
using System.Collections.Generic;

namespace Mirtol.Web.Extensions
{
public static class TaskDetailExtensions
{
    public static TaskDetail ToTaskDetail(this Task task)
    {
        var success = "success";
        var warning = "warning";
        var error = "error";


 return new TaskDetail
                {
                    Id = task.Id,
                    Name = task.Name,
                    Description = task.Description,
                    Status = task.Status,
                    Phase = task.Phase != null ? task.Phase.Name : string.Empty,
                    Project = task.Project != null ? task.Project.ShortName : string.Empty,
                    StartDate = task.StartDateTime,
                    DueDate = task.DueDate,
                    overdue = task.DueDate > System.DateTime.Now ? success : task.DueDate < System.DateTime.Now.AddDays(-7) ? error : warning,


                };
        }
    }
}


using Mirtol.Entities.Mir;
using Mirtol.Web.Models;

namespace Mirtol.Web.Extensions
{
public static class GroupDetailExtensions
{
    public static GroupDetail ToGroupDetail(this Group group)
    {

        return new GroupDetail
            {
                GroupName = group.Name != null ? group.Name: string.Empty,
                GroupDescription = group.Description !=null ? group.Description: string.Empty,

         };
    }
}
}

所以我的任务控制器有一个动作;

    public IEnumerable<TaskDetail> GetUserProjectTasks(int id, string ustr, int uid)
    {
        var projectUTasks = taskRepository.GetUserProjectTasks(id, ustr, mirtolSecurity.CurrentUserId).Distinct();

        return projectUTasks.OrderByDescending(x => x.DueDate).Select(x => x.ToTaskDetail());
    }

返回到TaskDetail。并包括“组”

我在TaskDetailExtension和TaskDetaail中苦苦挣扎,我如何反映一个任务可以属于多个组并且组可以有多个任务的事实? CF 在我的实体类上处理了这个问题,并且关系似乎在那里设置得很好。

我的想法是 Groups = task.Groups(x => x.Groups.ToGroupDetail()),

在TaskDetailExtension中?

任何帮助表示赞赏。

约翰

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-web-api entity-framework-5 code-first


    【解决方案1】:

    我将假设您的任务有一个名为 Groups 的 IEnumerable。 在这种情况下,您需要两种扩展方法。一个将转换您的子模型,另一个将转换您的子模型列表。

    public static GroupDetail ToGroupDetail(this Group group)
    {
        return new GroupDetail { .. your mappings };
    }
    
    public static IEnumerable<GroupDetail> ToGroupDetailList(this IEnumerable<Group> groups)
    {
        return groups.Select(g => g.ToGroupDetail());
    }
    

    然后在 ToTaskDetail 的其他属性之后包含以下行。

    Groups = task.Groups.ToGroupDetailList()
    

    如果 task.Groups 是 IQueriable,您需要更改 ToGroupDetailList 扩展方法以采用 IQueriable 而不是 IEnumerable。希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多