2016-04-09 29 views
1

Sadece ASP.NET MVC projesinde çoktan çoğa ilişki için bağlantı tablosu hakkında biraz netlik almak istiyorum. Denetleyici ve Görünümler oluşturulduğunda, bağlantı tablosuna okuma ve yazma için herhangi bir kod yok gibi görünüyor !? Otojenlenen tek şey, OrderEmployee tablosudur.Çoktan çoğa ilişki okumak ve yazmak

Eğer doğru anladıysam, oluşturduğum her sipariş için, aynı zamanda OrderEmployee tablosunda ele alan Çalışanın kimliğini eklemem gerekiyor mu? Oder'leri listelemek ve o Siparişi işleyen her bir Çalışan'ı tanımak istediğimde, OrderEmployee tablosundan okumam gerekiyor mu? Bir bağlantı tablosuna nasıl yazılacağı ve yazılacağı hakkında herhangi bir eğitici bulamıyorum.

Bu okuma ve yazma kodunu kendi başıma kontrol cihazına eklemem gerekir mi? Bu konuda biraz açıklık kazanabilir miyim?

public class Order 
{ 
public int ID { get; set; } 
public string Name { get; set; } 
public int? ManufacturerID { get; set; } 
public virtual Manufacturer Manufacturer { get; set; } 
public virtual ICollection<Employee> Employees { get; set; } 
} 

public class Employee 
{ 
public int ID { get; set; } 
public string Name { get; set; } 
public int EmployeeNumber { get; set; } 
public virtual ICollection<Timeunit> Timeunits { get; set; } 
public virtual ICollection<Order> Orders { get; set; } 
} 

cevap

0

Pek çok ilişkide okumak ve yazmak çok zor değil, ancak başlangıçta doğru bir şekilde almak zor değildir. Modellerinize hiçbir şey eklemek zorunda değilsiniz, haklılar.

Yazma

Ben bir açılan liste ile bir çalışan için tek bir sipariş eklemek için nasıl bir örnekle göstereceğiz. Çalışanlara birden fazla sipariş ekleme konsepti neredeyse aynıdır, bir öğretici ile altta bir bağlantı bulacaksınız. Her şeyden

Önce görünüm modellerini böyle oluşturmalısınız: senin EmployeesControler yılında Sonra

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; } 
} 

: İlk parametre nesnelerin listesi olacak

hangi Bir şey seçmek istiyorum (bu durumda bir Sipariş). İkinci parametre, görünüm modeline (SelectOrderID olarak) geçmek istediğiniz Siparişinizin uygunluğunun adıdır ve son olarak üçüncü parametre, açılır menüde görüntülemek istediğiniz değerdir.

Ve Create.cshtml yılında

bu ilk satırı değiştirin: Artık

<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> 

sahip olmalıdır:

@model TestStackOverflow.Models.CreateEmployeeViewModel 

Sonraki Html.BeginForm açılır listeyi eklemek Oluştur görünümünde this.

Sonra EmployeesControler geri dönün ve oluşturmak için SONRASI yöntemi bulmak ve bu ile değiştirin:

[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); 
    } 

Bu görünüm modeli değerlerine dayalı yeni Çalışan yaratacak ve bir sipariş eklemek Bu Çalışana. Şimdi, OrderEmployees tablonuzu kontrol ederseniz, bir Çalışan eklediğinizde yeni bir girişin oluşturulduğunu görmelisiniz.değerlerinin okunması

Okuma

yazmaktan daha çok basittir. Bir sipariş işleme tüm çalışanları okumak istiyorsanız, sadece bu gibi yapmak

dosyanızın üstündeki bu ekleyin (bunu göstermek için Siparişlerim'den Index.cshtmlaldı):

Ve şimdi dosyayı biraz daha değiştirin. Bu gibi görünmelidir:

görünümlerinizde birçok ilişkilere pek ilişkilere birini ve pek işlemek için SelectList nasıl kullanılacağı hakkında bir eğitici bulabilirsiniz

Here

@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> 

}.

Bu cevabın size yardımcı olacağını umuyorum.

+0

Cevabınız için teşekkürler! Henüz test etmek için zamanım olmadı, ama olması gerektiği gibi görünüyor. –

İlgili konular