2016-08-22 37 views
0

因此,我一直试图解决这个问题大约一个星期了,并且在网上无处不在,似乎无法找到解决方案。我是新来的C#和.NET,所以我不完全理解我正在做的一切。基本上我正在构建一个项目管理应用程序。应用程序中的每个项目都有一个预计时间表,显示每个状态应由何时完成的未来日期。我正在尝试配置项目与其状态之间的一对一或一对一关系。试图在ASP.NET MVC中配置一对一的关系?

每次创建项目时,都会创建“预计时间线”,我将在稍后使用。

我遇到的问题是,每当我创建一个新项目时,其状态信息都不会显示在数据库中。我的数据库显示两个单独的表格,一个用于项目,另一个用于状态。但是,只要创建项目,状态行就不会被填入。有人可能会指出我正确的方向,并解释我做错了什么?

这里是我的项目模型

public class Project 
    { 
     public Project() 
     { 
      Status Status = new Status(); 
     } 

     [Key] 
     public int ProjectID { get; set; } 
     public string ProjectTitle { get; set; } 

     public virtual Status Status { get; set; } 

    } 
} 

这里是我的状态型号

public class Status 
    { 
     public Status() 
     { 
      GenerateTimeline(); 
     } 
     [Key,ForeignKey("Project")] 
     public int ProjectID { get; set; } 

     public virtual Project Project { get; set; } 

     public DateTime CreatedDate { get; private set; } 
     public DateTime TimeUntilConsultation { get; private set; } 
     public DateTime TimeUntilChecklist { get; private set; } 
     public DateTime TimeUntilFirstDesign { get; private set; } 

     public void GenerateTimeline() 
     { 
      CreatedDate = DateTime.Now.Date; 
      TimeUntilConsultation = CreatedDate.AddBusinessDays(10); 
      TimeUntilChecklist = CreatedDate.AddBusinessDays(20); 
      TimeUntilFirstDesign = CreatedDate.AddBusinessDays(34); 
     } 

    } 

这里是我的数据库上下文

public class TestDBContextThree : DbContext 
    { 

     public TestDBContextThree() : base("TestDBContextThree") 
     { 
      Database.SetInitializer(new DropCreateDatabaseIfModelChanges<TestDBContextThree>()); 
     } 
     public DbSet<Project> Projects { get; set; } 
     public DbSet<Status> Statuses { get; set; } 


     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
      modelBuilder.Entity<Project>().HasRequired(u => u.Status); 
     } 

    } 

这里是我创建一个新的控制器项目

// POST: Projects/Create 
     // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
     // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Create([Bind(Include = "ProjectID,ProjectTitle,SelectedStatus")] Project project, Status Status) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Statuses.Add(Status); 
       db.Projects.Add(project); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(project); 
     } 
+0

哪里是保存新项目的代码?您是否正在为要保存的实体设置有效状态? – Shyju

+0

我认为这可能与它有关。我编辑我的答案 –

回答

0

大声笑,我刚刚解决了我自己的问题感谢Shyju的评论。

当创建项目时,我并未添加有效的状态实体。

这是我创建项目的新控制器。 最初,我有Status Status而不是Status status

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Create([Bind(Include = "ProjectID,ProjectTitle,SelectedStatus")] Project project, Status status) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Statuses.Add(status); 
       db.Projects.Add(project); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(project); 
     }