2016-04-26 5 views
0

ich mein Problem vereinfacht, wie ich konnte, ich habe zwei Klassen Employee, Departments ich zwischen ihnen eine Eins-zu-Beziehung machen sollEintritt in zwei Tabellen gespeichert hat man zu viele Beziehung in mvc 4 Code zuerst

public class Employee 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string salary { get; set; } 
     public virtual Department depatments { get; set; } 
    } 

//////////////////////

public class Department 
    { 
     public Department() 
     { 
      this.employees = new HashSet<Employee>(); 
     } 
     public int Id { get; set; } 
     public string Name { get; set; } 

     public virtual ICollection<Employee> employees { get; set; } 
    } 

und das ist meine Kontextklasse

public class myEntity :DbContext 
    { 
     public DbSet<Employee> employees {get;set;} 
     public DbSet<Department> Departments {get;set;} 
    } 

gut, ich habe einen Create Action geschaffen, um der Lage sein, neuen Datensatz zu Employee und füllte es eine selectlist mit Department Tabelle/Klasse und übermittelt durch viewbag

[HttpGet] 
     public ActionResult Create() 
     { 
      ViewBag.xx = new SelectList(mycontext.Departments, "Id", "Name"); 
      return View(); 
     } 
     [HttpPost] 
     public ActionResult Create(Employee emp) 
     { 

      mycontext.employees.Add(emp); 
      mycontext.SaveChanges(); 
      return RedirectToAction("Index", "Employee"); 
     } 

Und es gibt die view zu sehen hinzufügen

**@using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 
     <fieldset> 
      <legend>Employee</legend> 

      <div class="editor-label"> 
       @Html.LabelFor(model => model.Name) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.Name) 
       @Html.ValidationMessageFor(model => model.Name) 
      </div> 

      <div class="editor-label"> 
       @Html.LabelFor(model => model.salary) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.salary) 
       @Html.ValidationMessageFor(model => model.salary) 
      </div> 
      <div class="editor-label"> 
       @Html.LabelFor(model => model.depatments) 
      </div> 
      <div class="editor-field"> 
       @Html.DropDownListFor(model =>model.depatments.Id,@ViewBag.xx as SelectList) 
       @Html.ValidationMessageFor(model => model.salary) 
      </div> 
      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 

Ich lief es, alles ist in Ordnung und Datenbank erstellt. die Ansicht Dropdownliste Rendern ID Und Name wie es sollte.

Normalerweise sollte jeder Mitarbeiterdatensatz Department ID als Fremdschlüssel haben. Das Problem ist, wenn ich neue Datensatz hinzufügen zu Employee es einen neuen Rekord in Department hinzufügen, wo es nur ID holen sollte, und fügen Sie Employee

Hinweis: Ich füllte die Department ersten

Antwort

0

Wenn Sie ohne Probleme verwenden Ein anderer Kontext zum Speichern, dann sollte es ohne dieses Problem funktionieren. Ihre Entität Abteilungen wird immer noch im ersten Kontext verfolgt, und das ist der Grund für das Problem.

Verwandte Themen