繁体   English   中英

尝试在ASP.NET MVC中配置一对一关系?

[英]Trying to Configure a One-To-One relationship in ASP.NET MVC?

因此,我已经尝试解决此问题大约一个星期了,并且已经在网上看到了很多地方,但是似乎找不到解决方案。 我是C#和.NET的新手,所以我并不完全了解我所做的一切。 基本上我正在构建一个项目管理应用程序。 应用程序中的每个项目都有一个计划时间表,该时间表显示了完成每个状态的未来日期。 我正在尝试配置一个项目与其状态之间的一对零或一个关系。

每次创建一个项目时,都会创建一个“计划的时间轴”,稍后我将使用它。

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

这是我的项目模型

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);
        }

大声笑,由于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);
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM