2010-12-22 113 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