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.
Danke für Ihre Antwort! Ich hatte noch nicht die Zeit es zu testen, aber es scheint so, als müsste es. –