2016-07-29 21 views
-2

Ich habe zwei Tabellen mit den ID-Spalten in einer dritten Tabelle verbunden. In meiner Steuerung gebe ich einen einzelnen Artikel aus einer Tabelle zurück und muss Artikel aus einer zweiten Tabelle auflisten, die sich auf den einzelnen Artikel aus der ersten Tabelle bezieht. Hier ist mein aktueller gebrochen Code:Ich muss Datenbankeinträge mit Join-Tabelle in Visual Studio 2015 zurückgeben. Rc2 asp.net core

Mietstationen Modell:

public class Depot 
{ 
    public int DepotID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<VendorDepot> VendorDepots { get; set; } 
} 

Vendors Modell:

 public class Vendor 
{ 
    public int VendorID { get; set; } 
    public string CompanyName { get; set; } 

    public virtual ICollection<VendorDepot> VendorDepots { get; set; } 
} 

VendorDepots Model (Join-Tabelle):

 public class VendorDepot 
{ 
    public int VendorDepotID { get; set; } 
    public int DepotID { get; set; } 
    public int VendorID { get; set; } 

    public virtual Depot Depot { get; set; } 
    public virtual Vendor Vendor { get; set; } 
} 

Context-Datei:

 public class GuideContext : DbContext 
{ 
    public GuideContext(DbContextOptions<GuideContext> options) 
     : base(options) 
     { } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<VendorDepot>() 
      .HasKey(t => new { t.VendorID, t.DepotID }); 

     modelBuilder.Entity<VendorDepot>() 
      .HasOne(pt => pt.Vendor) 
      .WithMany(p => p.VendorDepots) 
      .HasForeignKey(pt => pt.VendorID); 

     modelBuilder.Entity<VendorDepot>() 
      .HasOne(pt => pt.Depot) 
      .WithMany(t => t.VendorDepots) 
      .HasForeignKey(pt => pt.DepotID); 
    } 

    public virtual DbSet<Depot> Depots { get; set; } 
    public virtual DbSet<VendorDepot> VendorDepots { get; set; } 
    public virtual DbSet<Vendor> Vendors { get; set; } 
}   
Hier

ist mein Controller Info:

 public IActionResult Index(int id) 
    { 
     var thisDepot = _context.Depots.FirstOrDefault(d => d.DepotID == id); 

     thisDepot.Vendors = _context.Vendors.Join(_context.VendorDepots.Where(d => d.DepotID == id).ToList(), 
      d => d.VendorID, 
      d => d.VendorID, 
      (o, i) => o).ToList(); 

     return View(thisDepot); 
    } 

Also das Problem, das ich habe ist, dass ich das spezifische Depot anzeigen kann, die ich auf eine neue Ansichtsseite wählen, aber ich kann nicht die Verkäufer anzeigen, die mit dem spezifischen zugeordnet sind, Depot. Ich hatte den Code an einem Punkt, wo ich alle Verkäufer sehen konnte, aber sie waren nicht spezifisch für das spezifische Depot. Ein weiterer Versuch ließ mich nur Verkäufer ansehen, die eine ID hatten, die mit sich selbst identisch war, dh .. 1 und 1 oder 5 und 5.

Danke.

Habe gerade einige Updates gemacht, einen Schreibfehler gefunden und neuen Code für meine Context- und Controller-Dateien hinzugefügt. Ich könnte wirklich etwas Hilfe auf dem Controller gebrauchen!

Antwort

0

Möglicherweise müssen Ihre Daten eifrig geladen werden. So etwas (habe es selbst nicht ausprobiert)

var thisDepot = _context.Depots .Single (d => d.DepotID == id) .INCLUDE (x => x.VendorDepots) .INCLUDE (y => y.Vendor);

Könnte schwierig sein mit der vielen zu vielen Beziehung. Hier ist ein anständiger Artikel zum Lazy/Eager/Explicit Beladebeispiel:

http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application

+0

Hey sjkype, vielen Dank für den Eingang und den Link. Ich muss diese Seite ein Dutzend Mal gelesen haben und versuchte, die Ladebeispiele zu verwenden. Nicht sicher, wie Sie alle mit bestimmten Depots verbundenen Lieferanten auflisten. Übertreibe ich das? Ich kann einfach keine speziellen Dokumente über viele-zu-viele-Beziehungen finden, die mir Ideen geben können. – cbkinor

+0

Ich habe ein paar mehr Aktualisierungen für meinen Code vorgenommen. Trotzdem könnte man Hilfe bei der Fertigstellung der Controller-Datei gebrauchen. Ich fühle, dass ich näher komme, aber immer noch ein paar Sachen vermisse. – cbkinor

+0

Endlich fand ich es heraus mit Hilfe von einem alten Klassenkameraden Nicholas Jensen-Hay. Danke für die Hilfe Nick! – cbkinor