2016-04-09 15 views
1

Ich möchte nur etwas Klarheit über Link-Tabelle für eine Viele-zu-viele-Beziehung in einem ASP.NET MVC-Projekt erhalten. Wenn der Controller und die Ansichten erstellt werden, scheint es keinen Code zum Lesen und Schreiben in die Verknüpfungstabelle zu geben !? Das einzige, was autogeneriert wird, ist die Tabelle OrderEmployee.Viele-zu-viele-Beziehung lesen und schreiben

Wenn ich es richtig verstanden habe, muss ich für jede Bestellung, die ich erstelle, auch die ID des Mitarbeiters hinzufügen, der sie in der OrderEmployee-Tabelle bearbeitet hat? Und wenn ich die Oder auflisten möchte und jeden Mitarbeiter wissen möchte, der diese Bestellung bearbeitet hat, muss ich aus der OrderEmployee-Tabelle lesen? Ich kann keine Anleitungen zum Lesen und Schreiben von und aus einer Linktabelle finden.

Muss ich diesen Code zum Lesen und Schreiben selbst in die Steuerung einfügen? Preciate wenn ich Klarheit darüber bekommen kann!

Antwort

0

Zum Lesen und Schreiben in einer vielen zu vielen Beziehung ist nicht wirklich schwierig, aber schwer, es gleich am Anfang zu bekommen. Sie müssen nichts in Ihren Modellen hinzufügen, sie haben Recht.

Schreiben werde ich Ihnen mit einem Beispiel zeigen, wie eine einzige, um einen Mitarbeiter mit einer Dropdown-Liste hinzuzufügen. Das Konzept zum Hinzufügen mehrerer Bestellungen zu Mitarbeitern ist fast das gleiche, Sie finden einen Link am Ende mit einem Tutorial.

Zunächst einmal sollten Sie Ansicht Modelle erstellen wie folgt aus:

public class CreateEmployeeViewModel 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int EmployeeNumber { get; set; } 

    public int SelectedOrderID { get; set; } 
    public SelectList OrdersList { get; set; } 
} 

Dann in Ihrem EmployeesControler:

Der erste Parameter die Liste der Objekte, in denen werden Sie möchte etwas auswählen (in diesem Fall eine Order). Der zweite Parameter ist der Name der Eigenschaft Ihrer Bestellung, die an das View-Modell übergeben werden soll (z. B. SelectOrderID). Der dritte Parameter ist schließlich der Wert, der in der Dropdown-Liste angezeigt werden soll.

Und in Ihrem Create.cshtml die erste Zeile mit diesem ersetzen:

@model TestStackOverflow.Models.CreateEmployeeViewModel 

Weiter, um die Dropdown-Liste im Html.BeginForm hinzufügen: Sie

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

Jetzt haben sollte this in der Erstellungsansicht.

dann auf Ihre EmployeesControler zurück und finden Sie die POST Verfahren zum Erstellen und ersetzen Sie es mit diesem:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(CreateEmployeeViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      Employee employee = new Employee() 
      { 
       Name = model.Name, 
       ID = model.ID, 
       EmployeeNumber = model.EmployeeNumber, 
       Orders = new List<Order>() 
      }; 
      employee.Orders.Add(db.Orders.Where(x => x.ID == model.SelectedOrderID).FirstOrDefault()); 
      db.Employees.Add(employee); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(model); 
    } 

Es wird einen neuen Mitarbeiter erstellen auf der Grundlage der Ansicht Modellwert und eine Bestellung hinzufügen zu diesem Angestellten. Wenn Sie jetzt Ihre OrderEmployees Tabelle überprüfen, sollten Sie sehen, dass ein neuer Eintrag erstellt wird, wenn Sie einen Mitarbeiter hinzufügen.

Lesen

Das Lesen der Werte ist wirklich einfacher als das Schreiben. Wenn Sie alle Mitarbeiter lesen möchten, die einen Auftrag Handhabung, tun Sie es einfach so (habe ich Index.cshtml von den Bestellungen um es zu beweisen)

dies Ihrer Datei oben hinzufügen:

@using YourNameSpace.Models 

Und jetzt noch ein wenig weiter die Datei ändern. Es sollte wie folgt aussehen:

@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.Name) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.ManufacturerID) 
    </td> 
    <td> 
     @foreach (Employee e in item.Employees) 
     { 
      @e.Name <br /> 
     } 
    </td> 
    <td> 
     @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | 
     @Html.ActionLink("Details", "Details", new { id=item.ID }) | 
     @Html.ActionLink("Delete", "Delete", new { id=item.ID }) 
    </td> 
</tr> 

}

Here Sie eine Anleitung, wie manSelect benutzen finden kann man zu viele Beziehungen und viele zu viele Beziehungen in Ihren Ansichten zu behandeln.

Ich hoffe, diese Antwort wird Ihnen helfen.

+0

Danke für Ihre Antwort! Ich hatte noch nicht die Zeit es zu testen, aber es scheint so, als müsste es. –