2014-01-07 32 views
1

如果您都需要更多詳細信息,我會將它們發送給您。下面是一個包含2代表的屏幕截圖:需要使用EF6 Fluent API在使用PK和FK的2個表之間使用適當的語法

enter image description here

基本上這是什麼樣子的SQL今天:

enter image description here

我試圖用流利的API的關係,但不當然如何去做。 表1有一個PK和一個FK。 表2沒有PK,只有FK。 下面是我需要的一個例子,但是這個代碼適用於一組不同的表。我試圖讓「關係」語法正確此處描述的情景:

this.ToTable("Server"); 
    //primary key 
    this.HasKey(t => t.serverId); 
    //properties 
    ... 
    //relationships 
    this.HasMany(n => n.NetworkAdapters) 
     .WithRequired(s => s.Server) 
     .HasForeignKey(s => s.serverId) 
     .WillCascadeOnDelete(true); 

謝謝

+0

是否表2有什麼,唯一識別一行?否則EF將無法管理它。 –

+0

hi Gert,不,不。我最終在表2中添加了一個PK,並且做了一對多的關係,就像我在這裏演示的那樣。我如何關閉這個問題?或回答它,所以人們不會嘗試回覆它。謝謝 – Max

+0

我該如何vode刪除?點擊向下箭頭? make -1? – Max

回答

0

沒有在表2中的主鍵,你最有可能尋找一到零或一個關係。你可能會需要我將描述的兩端。

一到零或一體

// Configure the primary key for Table1 
    modelBuilder.Entity<Table1>() 
    .HasKey(t => t.networkAdapterId); 

// Map one-to-zero or one relationship 
    modelBuilder.Entity<Table2>() 
    .HasRequired(t => t.Table1) 
    .WithOptional(t => t.Table2); 

一對1

// Configure the primary key for the Table1 
    modelBuilder.Entity<Table1>() 
    .HasKey(t => t.networkAdapterId); 

// Map one-to-one relationship 
    modelBuilder.Entity<Table2>() 
    .HasRequired(t => t.Table1) 
    .WithRequiredPrincipal(t => t.Table2); 

here更多細節

+0

實際上,在這種情況下,表2可以有多於1行,也就是說,它可以包含例如3行(3 ipAddresses),其中包含指向表1中的網絡適配器的相同FK。這就是它在我們的配置中的方式SQL環境,這就是我困惑的原因。這看起來更像是1對我來說很多,但表2沒有PK! :( – Max

+0

然後table2的主鍵是networkAdapterId和ipAddress?你需要設置它如下:modelBuilder.Entity ().HasKey(o => new {o.networkAdapterId,o.ipAddress});那麼你應該能夠設置你的一對多關係如上所示,讓我知道這是否是解決方案,我會寫出一個新的答案 – ProxyTech

+0

表2沒有任何PK,我添加了另一個屏幕截圖,讓我知道是否有幫助請解釋一下我的場景 – Max