2017-02-09 19 views
0

我有這些表:如何使用帶三個外國人密鑰的多表到多表的流利api?

  • 表A(IDA,---)
  • 表B(IDB,---)
  • 表C(IDC,---)
  • TableABC(IdFkA, IdFkB,IdFkC)

另外,我有4個POCO對象:

TableA 
{ 
    IDTableA; 
} 

TableB 
{ 
    IDTableB; 
} 

TableC 
{ 
    IDTableC; 
} 

TableABC 
{ 
    IDTableA; 
    IDTableB; 
    IDTableC; 
} 

注意:我知道我沒有顯示導航屬性,但它只是說我擁有realtion表的POCO實體,這不像當我只有兩個表具有多對多關係時。

TableABC將三列IdFkA,IdFkB,IdFkC作爲關鍵字。我想知道如何將這與EF6和流利的API進行映射。

我想插件這樣的事情:

modelBuilder.Entity<TableABC>() 
    .HasRequired<TableA>(s => s.TableA) 
    .WithMany(s => s.TableABC) 
    .HasForeignKey(s => s.IdFkA); 

    .HasRequired<TableB>(s => s.TableB) 
    .WithMany(s => s.TableABC) 
    .HasForeignKey(s => s.IdFkB); 

    .HasRequired<TableC>(s => s.TableC) 
    .WithMany(s => s.TableABC) 
    .HasForeignKey(s => s.IdFkC); 

我如何有關係表,實際上它是一個到betwenn表,不是一個真正的多對多關係一對多的關係,但我不當然如果這是正確的。

所以在總結中,我想知道如何使用流暢的API設置三個表之間的關係。

+0

您建議的代碼有什麼問題? – smoksnes

回答

1

我想知道如何設置用流利的API

我覺得有點不清楚三個 表之間的關係,如果你想在表之間的許多一對多的關係或不。但正如你所提到的「真的這是一個多對多的關係」我假設你希望它是一對多的。

事實上,你有3個表並沒有太大的不同。你只需要三次做同樣的事情。假設你的模型看起來像這樣(但公共屬性):

TableA 
{ 
    int IDTableA { get; set; } 
    ICollection<TableABC> Relations { get; set; } // Bad name but proves point. 
} 

TableB 
{ 
    int IDTableB { get; set; } 
    ICollection<TableABC> Relations { get; set; } 
} 

TableC 
{ 
    int IDTableC { get; set; } 
    ICollection<TableABC> Relations { get; set; } 
} 

TableABC 
{ 
    int IDTableA { get; set; } 
    TableA A { get; set; } 
    int IDTableB { get; set; } 
    TableA B { get; set; } 
    int? IDTableC { get; set; } // Optional 
    TableA C { get; set; } 
} 

我更喜歡使用EntityTypeConfiguration,這使您可以使用this。但除此之外,您可以改用modelBuilder.Entity<TableABC>()。然後,你可以這樣做:所有的映射是基於TableABC

public class TableABCMap : EntityTypeConfiguration<TableABC> 
{ 
    public TableABCMap() 
    { 
     this.HasRequired(e => e.TableA) 
      .WithMany(x => x.Relations) 
      .HasForeignKey(x => x.IDTableA); 

     this.HasRequired(e => e.TableB) 
      .WithMany(x => x.Relations) 
      .HasForeignKey(x => x.IDTableB); 

     this.HasOptional(e => e.TableC) 
      .WithMany(x => x.Relations) 
      .HasForeignKey(x => x.IDTableC); 
    } 
} 

注意。你可以用相反的方式來做,但我個人更喜歡這種方式。