尝试在ASP中配置一对一关系.净MVC
本文关键字:一对一 关系 MVC 配置 ASP | 更新日期: 2023-09-27 18:03:41
所以,我一直在试图解决这个问题,现在大约一个星期了,我在网上到处看,只是似乎找不到一个解决方案。我是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);
}
}
这里是我的Database Context
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);
}