1

我在SQL Server中有四張表,圖中的表和關係。帶複合鍵的兩個表加入實體框架

enter image description here

問題是,當我使用實體框架的GroupAdminsGroupMembers表被加入到一個表,圖像顯示的情況:

enter image description here

我想要得到的四個表在實體框架中。我該怎麼辦 ?

更新

真正的問題是,我不能爲GroupAdminsGroupMembers表以同樣的方式,因爲我與其他表做添加或刪除項目。例如,如果我想要添加項目AspNetUsers,我用這個:

using (var db=new DatabaseContext()) 
     { 
     AspNetUsers user = new AspNetUsers{Id=1,Email="[email protected]"}; 
     db.AspNetUsers.add(user); 
     db.SaveChanges(); 
     } 

雖然我不能做GroupAdminsGroupMembers一樣,因爲GroupAdminsGroupMembers是不存在的。

+2

就是那樣EF處理許多一對多的關係 - 你不會看到,在這樣的連接兩個表中的「鏈接」表一段關係。 –

+0

@marc_s你的意思是說不能分開表格嗎? –

+0

否 - 這些僅僅是建立多對多關係的鏈接表--EF將**不顯示這些關係,而是在「幕後」爲您處理它們。你不會失去任何功能!讓EF完成工作 –

回答

1

如果你有一個多對多關係,兩個表之間的關係,在關係數據庫中,你需要一個「鏈接」表來連接兩個基表。

EF會自動爲您處理這個問題 - 它沒有明確顯示該鏈接表 - 它在幕後處理那些內部的插入和刪除操作。你不需要做任何特別的事情!使用此默認行爲 - 不要與它戰鬥!它的作品您的優勢!

你做什麼基本上是在表到基於集合的導航屬性之一添加新條目,以及EF會自動插入必要的項目到相關的鏈接表。

因此,舉例來說,你可以做這樣的事情:

using (var db = new DatabaseContext()) 
{ 
    AspNetUsers user = new AspNetUsers { Id = 1, Email = "[email protected]" }; 
    db.AspNetUsers.add(user); 

    // get a group to add the new user to 
    Groups g = db.Groups.FirstOrDefault(g => g.Name = "SomeGroupName"); 

    if(g != null) 
    { 
     // since I don't have your EDMX model here, I don't know if "AspNetUsers" for the "Groups" 
     // refers to the "GroupMembers" or the "GroupAdmins" connection - *YOU* can see this when 
     // you look at the EDMX model designer! 
     g.AspNetUsers.Add(user); 
    } 

    // now when you save, you'll get a new user in "AspNetUsers", AND ALSO: you'll get an entry 
    // in either "GropuMembers" or "GroupAdmins" that contains the two ID's - AspNetUsers.Id 
    // and the Id for the group with the name of "SomeGroupName" 
    db.SaveChanges(); 

} 
+0

正如附註一樣,如果模型中包含附加信息(例如創建關係的日期或任何其他屬性),則只有在模型中可以使用這些多對多橋接表纔有意義。即如果它們包含額外的列,除了相關的表鍵。 – JotaBe

+0

@JotaBe:正確 - 在這種情況下,EF **將**表示這些表格。只有當包含鏈接表中的兩個PK時,EF纔會將它們「隱藏」在幕後 –

+0

這些都不適用於數據庫優先。英孚不會爲你創造*任何東西*你應該負責設置所有的數據庫表。 –