2010-12-22 145 views
3

例如我有人員,位置和personlocation表來鏈接這兩個。我也有一個角色和人格表。實體框架多對多添加/刪除對象問題

Tables: 

Person (personid, name) 

Personlocation (personid, locationid) 

Location (locationid, description) 

Personrole (personid, roleid) 

Role (roleid, description) 

EF會給我個人,角色和位置實體。

由於EF不會生成personlocation和personrole實體類型,因此它們不能在查詢中使用 。

問題:如何添加Person對象並返回personid,然後將該id添加到Personrole表/關聯中?

例如

Person p = new Person(); 
p.name = "John" 
...... 
entity.AddToPersons(p); 
for(var roleid in Roleid) 
entity.AddtoRoles(roleid)? 

回答

2

EF不需要映射的時候沒有什麼,但FK的的連接表 - 這是一件好事。它足夠聰明,可以在幕後進行「無聲連接」。

問題:如何添加Person對象並返回personid,然後將該id添加到Personrole表/關聯中?

您只需要在「Person」實體上使用「角色」關聯。您不需要直接添加到「角色」表中。

E.g:

// Create new Person 
Person p = new Person(); 
p.Name = "John"; 

// Create new Role 
Role r = new Role(); 
r.Description = "Administrator"; 

// Add new Role to this new Person 
p.Roles.Add(r); 

// Add Person to context (no need to add Role) 
ctx.AddToPersons(p); 

// Save Changes 
ctx.SaveChanges(); 

實體框架是非常聰明的。它會看到有一個新角色,首先添加,然後添加一個人,然後根據剛剛創建的角色的id在連接表中添加記錄。

HTH。

編輯 - 在迴應評論:

THX,如果我想補充現有的角色是什麼(例如,角色ID = 1,說明= 「編輯器」)

非常類似於以上。

就去拿從數據庫中現有的角色,並把它添加到人:

Role r = ctx.Roles.SingleOrDefault(x => x.RoleId == 1 && x.Description == "Editor"); 
p.Roles.Add(r); 
+0

THX,如果我想補充現有的角色是什麼(例如,角色ID = 1,說明=「編輯器」) – Kiddo 2010-12-22 05:37:01