【发布时间】:2017-08-26 04:44:15
【问题描述】:
我正在使用 ASP.NET MVC 5 和 Entity Framework 6。我有一个页面允许用户输入进程信息。此信息的一个方面是从启动过程的下拉列表中进行选择。这个类大致是这样的:
**
public class SupportProcess
{
[Key]
public int ProcessId { get; set; }
[DisplayName("Starting process?")]
public virtual SupportProcess StartProcess { get; set; }
public string Name { get; set; }
[DisplayName("When is this run?")]
public virtual ProcessSchedule ProcessSchedule { get; set; }
[DisplayName("")]
public string Description { get; set; }
[DisplayName("Expected Result")]
public string ExpectedResult { get; set; }
}
**
我正在使用一个视图模型,它具有 SupportProcess 的属性、选定的启动进程和一个进程列表来填充视图上的下拉列表。
public class SupportProcessViewModel
{
public SupportProcess SupportProcess { get; set; }
public int SelectedStartProcess { get; set; }
public List<SupportProcess> Processes { get; set; }
public SupportProcessViewModel()
{
this.SupportProcess = new SupportProcess();
}
}
我的编辑帖子操作如下所示:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(SupportProcessViewModel vm)
{
if (ModelState.IsValid)
{
if (vm.SelectedStartProcess > 0)
{
vm.SupportProcess.StartProcess = db.SupportProcesses.Find(vm.SelectedStartProcess);
}
db.Entry(vm.SupportProcess).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(vm);
}
问题在于,虽然 vm.SelectedStartProcess 不为 null 并且具有适当的值,但它永远不会保存到数据库中。数据库将此字段显示为 StartProcess_ProcessId。另外值得注意的是,一个进程可能有 0 或 1 个正在启动的进程。
我想知道 EF 已将数据库表中的此属性设为外键(本质上指向同一个表)这一事实是否会导致问题。我很乐意听取建议。
我还要补充一点,“创建帖子”操作按预期工作。这一定与向 EF 传达 StartProcess 属性也需要在实体上更新有关。虽然这是一个猜测...
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create( SupportProcessViewModel vm)
{
if (ModelState.IsValid)
{
if(vm.SelectedStartProcess > 0) {
vm.SupportProcess.StartProcess = db.SupportProcesses.Find(vm.SelectedStartProcess);
}
db.SupportProcesses.Add(vm.SupportProcess);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(vm);
}
【问题讨论】:
标签: c# asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-6