Hello I'm fairly new to ASP MVC so I'm a little stuck resolving this issue.
The table structure has a job as the parent and then task assigned within that job (jobdetails) as the child. The jobsdetail table has a foreignkey (jobsid) to the jobs table.
When I try to save a record, I get
Exception Details: System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.JobDetails_dbo.Jobs_jobsid". The conflict occurred in database "NavTracking", table "dbo.Jobs", column 'Id'. The statement has been terminated."
I suspect the issue is on the : _context.JobDetail.Add(JobDetail); line because its trying to insert a jobsid but not sure.
Here is my class:
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; }
}
My Controller to save the record:
[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");
}
and the View to post the data:
@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>
}
My View Model:
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; }
}