2016-07-29 41 views
-2

我有兩個表,ID列連接在第三個表中。在我的控制器中,我從1個表中返回單個項目,並且需要列出與第一個表格中的單個項目相關的第二個表格中的項目。這是我目前的斷碼:我需要在visual studio 2015中使用連接表返回數據庫條目rc2 asp.net核心

倉庫型號:

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

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

廠商型號:

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

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

VendorDepots模型(連接表):

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

上下文文件:

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

這裏是我的控制器信息:

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

所以我遇到的問題是,我可以查看我的新視圖頁面上選擇特定的倉庫,但我無法查看與該特定相關的供應商倉庫。我有一段代碼,可以查看所有的供應商,但他們並不特定於特定的倉庫。另一個嘗試離開了我只與查看供應商有自己的ID相同,即.. 1和1或5和5.

謝謝。

只做了一些更新,發現拼寫錯誤,併爲我的上下文和控制器文件添加了一些新代碼。我真的可以在控制器上使用一些幫助!

回答

0

可能需要加載您的數據。類似的東西(沒有自己嘗試過)

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

與多對多關係可能會很棘手。這裏是懶惰/急於/顯式加載例子像樣的文章:

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

嘿sjkype,感謝輸入和鏈接。我必須讀過那個頁面十幾次,並嘗試使用加載示例。不確定如何列出與特定軟件倉庫相關的所有供應商。我是否在說這個?我無法找到任何關於多對多關係的具體文檔,這些關係可以給我提供創意。 – cbkinor

+0

我對代碼做了更多更新。仍然可以使用一些幫助完成控制器文件。我覺得我正在接近但仍然缺少一些東西。 – cbkinor

+0

終於在老同學Nicholas Jensen-Hay的幫助下算出來了。感謝您的幫助尼克! – cbkinor

相關問題