2016-07-05 3 views
0

Я искал много сообщений и узнал, что это один из способов настройки отношений один к одному в EF, но похоже, что редактирование не работает очень хорошо ,отношения один к одному, ASP.NET MVC и ошибка ссылочной целостности

public class Employee 
{   
    [Key] 
    public int EmpId { get; set; } 
    public string Name{ get; set; } 

    public int WorkingDateTimeId { get; set; } 
    public virtual WorkingDateTime WorkingDateTimes { get; set; } 

} 

public class WorkingDateTime 
{   
    [ForeignKey("Employees")] 
    public int WorkingDateTimeId { get; set; } 
    public string Day { get; set; } 

    public virtual Employee Employees { get; set; } 

} 

Когда я создаю, он создает. Но WorkingDateTimeId свойства в сущности Сотрудника всегда 0.

<div class="form-group"> 
     @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

<div class="form-group"> 
     @Html.LabelFor(model => model.WorkingDateTimes.Day, "Monday: ", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.WorkingDateTimes.Day, new { htmlAttributes = new { @class = "form-control time_element" } }) 
     </div> 
    </div> 

При редактировании, я получаю эту ошибку: реляционного нарушения ограничения целостности произошло: Значение свойства (ы) «Employee.EmpId» на одном конце отношения не соответствуют значениям свойств 'WorkDateTate.WorkingDateTimeId' на другом конце.

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "EmpId,Name,WorkingDateTimes")] Employee employee) 
    { 

     db.Entry(employee).State = EntityState.Modified; // causing problem here 
    } 

Является ли отношение моего к одному неправильным? Что нужно сделать для правильного редактирования и сохранения в db? Любая помощь приветствуется.

ответ

0

Ваши ключевые определения неверны. WorkDateTimeId является основным ключом таблицы WorkDateTime, это НЕ является ForeignKey. Ключ ForeignKey от WorkDateTime для Employee - EmpId.

public class Employee 
{   
    [Key] 
    public int EmpId { get; set; } 
    public string Name{ get; set; } 
    public virtual WorkingDateTime WorkingDateTimes { get; set; } 
} 

public class WorkingDateTime 
{   
    [Key] 
    public int WorkingDateTimeId { get; set; } 
    [ForeignKey("Employees")] 
    public int EmpId {get;set;} 
    public string Day { get; set; } 
    public virtual Employee Employees { get; set; } 
} 

Это также будет правильным

public class Employee 
{   
    [Key] 
    public int EmpId { get; set; } 
    public string Name{ get; set; } 
    [ForeignKey("WorkingDateTimes")] 
    public int WorkingDateTimeId { get; set; } 
    public virtual WorkingDateTime WorkingDateTimes { get; set; } 
} 

public class WorkingDateTime 
{   
    [Key] 
    public int WorkingDateTimeId { get; set; } 
    public string Day { get; set; } 
    public virtual Employee Employees { get; set; } 
} 
+0

это не работает кстати – pavilion

+0

Что происходит? Необходимы ошибки. –

Смежные вопросы