2014-02-06 103 views
0

我一直在掙扎着這幾天。鏈接三個模型與所有模型之間的多對多鏈接

我有三種模式可以將許多關係鏈接在一起。

規則:

  • 一個要求可以有許多控制,反之亦然
  • 過程可以有許多控制,反之亦然

我目前顯示鏈接到要求所有控件我需求意見沒有問題,我甚至通過創建視圖模型來創建/更新工作,該視圖模型保存分配的數據

我想顯示鏈接到所查看的要求的控件鏈接的所有過程的列表。我不想在該級別編輯它們,因爲這將通過控制器控制器完成。這是通過兩個連接的是我無法弄清楚:(

模型表的鏈接:

public class Requirement 
{ 
    [Key] 
    public int RequirementId { get; set } 
    public string Name { get; set; } 
    public string Details { get; set; } 
    public virtual ICollection<Control> Controls { get; set; } 
} 

public class Control 
{ 
    public int ControlId { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Requirement> Requirements { get; set; } 
    public virtual ICollection<Procedure> Procedures { get; set; } 
} 

public class Procedure 
{ 
    [Key] 
    public int ProcedureId { get; set; } 
    public string Name { get; set; } 
    public string Details { get; set; } 
    public virtual ICollection<Control> Controls { get; set; } 
} 

的DbContext:

public class CompliancePortalContext : DbContext 
{ 
    public CompliancePortalContext() 
     : base("CompliancePortalContext") 
    { } 

    public DbSet<Control> Controls { get; set; } 
    public DbSet<Procedure> Procedures { get; set; } 
    public DbSet<Requirement> Requirements { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Procedure>().HasMany(c => c.Controls).WithMany(p => p.Procedures).Map(
      mc => 
      { 
       mc.MapLeftKey("ProcedureId"); 
       mc.MapRightKey("ControlId"); 
       mc.ToTable("ProcedureControl"); 
      }); 

     modelBuilder.Entity<Requirement>().HasMany(c => c.Controls).WithMany(r => r.Requirements).Map(
      mc => 
      { 
       mc.MapLeftKey("RequirementId"); 
       mc.MapRightKey("ControlId"); 
       mc.ToTable("RequirementControl"); 
      }); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

回答

1

這應該給你的所有鏈接到所有控件的程序鏈接到所有的要求。

from r in Requirements 
from c in r.Controls 
from p in c.Procedures 
select p 
+0

我不敢相信這是很容易的。我有很多要學習!謝謝Fredrik :) – MrAquatic