Entity framework ASP.NET MVC 4更新外键表

Entity framework ASP.NET MVC 4更新外键表,entity-framework,asp.net-mvc-4,Entity Framework,Asp.net Mvc 4,我的数据库中有两个表项目和任务一个项目可能有多个任务,因此它在任务列中插入了任务ID。创建新项目时,任务列将为空,可为空。然而,当创建新任务时,我希望通过将新创建的任务Id添加到“任务”列来获取任务Id并修改项目表。在MVC4中,我如何做到这一点?如果您愿意,您可以始终采用这种方法,因为项目有许多任务。我已经为您创建了模型 public class Project { public int Id { get; set; } public virtual ICollection&

我的数据库中有两个表项目任务一个项目可能有多个任务,因此它在任务列中插入了任务ID。创建新项目时,任务列将为空,可为空。然而,当创建新任务时,我希望通过将新创建的任务Id添加到“任务”列来获取任务Id并修改项目表。在MVC4中,我如何做到这一点?

如果您愿意,您可以始终采用这种方法,因为项目有许多任务。我已经为您创建了模型

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

    public virtual ICollection<ProjectTask> ProjectTasks { get; set; }
}

public class ProjectTask
{
    public int ProjectId { get; set; }
    public int TaskId { get; set; }

    public virtual Project Project { get; set; }
    public virtual Task Task { get; set; }
}

public class Task
{
    public int Id { get; set; }
    public string Description { get; set; }

    public virtual ICollection<ProjectTask> ProjectTasks { get; set; }
}
如果这听起来像你要做的,我已经附上了一些关于在实体框架中设置存储库模式的阅读资料

进一步阅读


我认为您的设计有问题。如果一个
项目
可以有许多
任务
,那么
项目
表应该不知道
任务
。每个
任务
都应该有一个
ProjectId
字段,该字段存储与其关联的
项目
ProjectId
。当然,任务表有一列名为Project\u ID,但是当我为名为“我的项目”的项目创建ID=7的新任务时,以及当我看到项目表时,在“项目任务”列下,任务ID为0而不是7。
项目
表不应包含任何类型的
任务
列。如果要查看与
项目
关联的
任务
,需要在
项目
表中的
项目
上的两个表之间执行
联接
(来自
任务
表),该联接等于
项目
表中的
项目
。是否使用实体框架?
var task = new Task() {Description = "My new task"};
Project project = ProjectRepository.FirstOrDefault();
if (project != null)
{
    project.ProjectTasks.Add(new ProjectTask(){Task = task});
    ProjectRepository.SaveChanges();
}