【发布时间】:2017-11-10 18:34:23
【问题描述】:
您好,我对 ASP MVC 还很陌生,所以我在解决这个问题时遇到了一些困难。
表结构有一个作业作为父作业,然后在该作业(作业详细信息)中分配的任务作为子作业。 jobsdetail 表有一个指向 jobs 表的外键 (jobsid)。
当我尝试保存记录时,我得到了
异常详细信息:System.Data.SqlClient.SqlException:INSERT 语句与 FOREIGN KEY 约束“FK_dbo.JobDetails_dbo.Jobs_jobsid”冲突。冲突发生在数据库“NavTracking”、表“dbo.Jobs”、列“Id”中。 声明已终止。”
我怀疑问题出在:_context.JobDetail.Add(JobDetail);行,因为它试图插入一个 jobid 但不确定。
这是我的课:
public class JobDetails
{
public int Id { get; set; }
[ForeignKey("jobsid")]
public virtual Jobs Job { get; set; }
public int jobsid { get; set; }
public JobType jobtype { get; set; }
public int jobtypeid { get; set; }
public Status status { get; set; }
public int? statusID { get; set; }
public DateTime? ReqDate { get; set; }
public int? EtcStatus { get; set; }
public Analysts Analyst { get; set; }
public int? analystID { get; set; }
public Priority priority { get; set; }
public int? priorityID { get; set; }
public bool IsTaskComplete { get; set; }
public string SpecialNotes { get; set; }
}
我的控制器保存记录:
[HttpPost]
public ActionResult SaveTask(JobTaskViewModel JobDetVM)
{
var jobex = _context.Job.SingleOrDefault(j => j.Id ==
if (JobDetVM.Jobdetail.Id == 0)
{
JobDetVM.Jobdetail.jobsid=jobex.Id;
_context.JobDetail.Add(JobDetVM.Jobdetail);
}
else
{
var jobdetailsInDB = _context.JobDetail.Single(t => t.Id == JobDetail.Id);
jobdetailsInDB.jobsid = JobDetail.jobsid;
jobdetailsInDB.jobtypeid = JobDetail.jobtypeid;
jobdetailsInDB.statusID = JobDetail.statusID;
jobdetailsInDB.ReqDate = JobDetail.ReqDate;
jobdetailsInDB.EtcStatus = JobDetail.EtcStatus;
jobdetailsInDB.analystID = JobDetail.analystID;
jobdetailsInDB.priorityID = JobDetail.priorityID;
jobdetailsInDB.IsTaskComplete = JobDetail.IsTaskComplete;
jobdetailsInDB.SpecialNotes = JobDetail.SpecialNotes;
}
_context.SaveChanges();
return RedirectToAction("Index", "Job");
}
以及发布数据的视图:
@using (Html.BeginForm("SaveTask", "Job"))
{
<div class="form-group">
@Html.LabelFor(m => m.Jobdetail.jobtypeid)
@Html.DropDownListFor(m => m.Jobdetail.jobtypeid, new SelectList(Model.Jobtype, "Id", "JobTypeVal"), "Select Job Type", new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Jobdetail.ReqDate)
@Html.TextBoxFor(m => m.Jobdetail.ReqDate, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Jobdetail.EtcStatus)
@Html.TextBoxFor(m => m.Jobdetail.EtcStatus, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Jobdetail.analystID)
@Html.DropDownListFor(m => m.Jobdetail.analystID, new SelectList(Model.Analyst, "Id", "AnalystName"), "Select Analyst", new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Jobdetail.priorityID)
@Html.DropDownListFor(m => m.Jobdetail.priorityID, new SelectList(Model.Priority, "Id", "PriorityVal"), "Select Priority", new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Jobdetail.statusID)
@Html.DropDownListFor(m => m.Jobdetail.statusID, new SelectList(Model.Status, "Id", "StatusVal"), "Select Status", new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(m => m.Jobdetail.SpecialNotes)
@Html.TextBoxFor(m => m.Jobdetail.SpecialNotes, new { @class = "form-control" })
</div>
@Html.HiddenFor(m => m.Jobdetail.Id)
@Html.HiddenFor(m => m.Jobdetail.jobsid)
<button type="submit" class="btn btn-primary">Save</button>
}
我的视图模型:
public class JobTaskViewModel
{
public JobDetails Jobdetail { get; set; }
public Jobs Job { get; set; }
public int jobsID { get; set; }
public IEnumerable<Status> Status { get; set; }
public IEnumerable<Analysts> Analyst { get; set; }
public IEnumerable<JobType> Jobtype { get; set; }
public IEnumerable<Priority> Priority { get; set; }
}
【问题讨论】:
-
您可以减少显示的代码量并添加另一个相关细节:
JobDetVM.Jobdetail的内容:它的jobid是鞋夹的地方。
标签: c# entity-framework tsql