2016-08-22 4 views
0

저는 약 1 주일 동안이 문제를 해결하기 위해 노력해 왔으며 온라인으로 사방을 보았을뿐 솔루션을 찾지 못하는 것 같습니다. 저는 C#과 .NET에 익숙하지 않아서 제가하는 모든 것을 완전히 이해하지 못합니다. 기본적으로 나는 프로젝트 관리 애플 리케이션을 구축하고있다. 응용 프로그램의 각 프로젝트에는 각 상태를 완료해야하는 미래 날짜가 표시되는 Projected Timeline이 있습니다. 프로젝트와 상태간에 One-To-Zero-or-One 관계를 구성하려고합니다.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

롤 (Lol), 저는 방금 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); 
     } 
관련 문제