Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 项目MVC中的EntityFramework多对多实现_C#_Asp.net Mvc_Entity Framework_Asp.net Mvc 5_Entity Framework 6 - Fatal编程技术网

C# 项目MVC中的EntityFramework多对多实现

C# 项目MVC中的EntityFramework多对多实现,c#,asp.net-mvc,entity-framework,asp.net-mvc-5,entity-framework-6,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Entity Framework 6,我有一个三表TaskModels、TaskAssigned和Users(AspNetUsers)。使用Task TaskModels我创建新任务,使用Task Assigned model我将此任务分配给用户。一切正常,但当我在图像中发布时,我只获得分配给用户的用户id和任务id。但我想看到的是用户名任务名而不是他们的id。这是我的代码和结果img public class TaskAssigned { public int Id { get; set; } public int

我有一个三表TaskModels、TaskAssigned和Users(AspNetUsers)。使用Task TaskModels我创建新任务,使用Task Assigned model我将此任务分配给用户。一切正常,但当我在图像中发布时,我只获得分配给用户的用户id和任务id。但我想看到的是用户名任务名而不是他们的id。这是我的代码和结果img

public class TaskAssigned
{
    public int Id { get; set; }
    public int TaskModelId { get; set; }
    public int UserId { get; set; }
    public TasksModel TasksModel { get; set; }
    public ApplicationUser User { get; set; }
}


public class TasksModel
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Heading is required")]
    public string Heading { get; set; }

    [Required(ErrorMessage = "Content is required")]
    public string Content { get; set; }

    [Required(ErrorMessage = "Start Date is required")]
    [DisplayName(displayName: "Start Date")]
    public DateTime StartDate { get; set; }

    [Required(ErrorMessage = "Deadline is required")]
    [DisplayName(displayName: "Deadline")]
    public int DeadlineTask { get; set; }          
}

public class ApplicationUser 
{
    public string Name { get; set; }
    public List<TaskAssigned> TaskAssigneds { get; set; }
}

解决此问题的更简单方法(不推荐)是:

@Html.DisplayFor(modelItem => item.TaskModelId)

@Html.DisplayFor(modelItem => item.UserId)
使用以下命令:

@Html.DisplayFor(modelItem => item.TasksModel.Name)

@Html.DisplayFor(modelItem => item.User.Name)
但是,您的
任务模型
似乎没有名称属性。此外,您还应该修复
@Html.DisplayNameFor
(两列)


现在,我建议创建一个如下的

public class TasksAssignedViewModel
{
    public int TaskModelId { get; set; }
    public int UserId { get; set; }
    public int TaskModelName { get; set; }
    public int UserName { get; set; }
}
public ActionResult Index()
{
    var list = db.TaskAssigneds.Select(l => new TasksAssignedViewModel
        {
            TaskModelId = l.TasksModel.Id,
            UserId = l.User.Id,
            TaskModelName = l.TasksModel.Name,
            UserName = l.User.Name
        });
    return View(list.ToList());
}
…然后在索引操作中,将查询投影到该视图模型中,如下所示:

public class TasksAssignedViewModel
{
    public int TaskModelId { get; set; }
    public int UserId { get; set; }
    public int TaskModelName { get; set; }
    public int UserName { get; set; }
}
public ActionResult Index()
{
    var list = db.TaskAssigneds.Select(l => new TasksAssignedViewModel
        {
            TaskModelId = l.TasksModel.Id,
            UserId = l.User.Id,
            TaskModelName = l.TasksModel.Name,
            UserName = l.User.Name
        });
    return View(list.ToList());
}
…最后,在
Index.cshtml
中,编辑模型的类型:

@model IEnumerable<DeadLiner.Models.TasksAssignedViewModel>
@model IEnumerable

这样,就不再需要使用
Include
。这也使查询速度加快了一点,因为您不再从数据库中获取所有字段。

我不再需要TaskAssigned表了?或者我只是添加一个TasksSignedViewModel?@muradheydarov你需要这个表。我们只是在
TasksSignedViewModel
中对其进行转换。我建议您阅读以了解投影是如何工作的。我按照您所写的做了所有事情,但在视图模型中返回null。我找不到问题出在哪里。我在哪里会犯错?