实体框架多对多添加/删除对象问题

时间:2010-12-22 04:25:52

标签: entity-framework entity

例如,我有人,地点和人员位置表来链接这两者。我也有角色和人员表。

 Tables:

Person (personid, name)

Personlocation (personid, locationid)

Location (locationid, description)

Personrole (personid, roleid)

Role (roleid, description)
EF将给我个人,角色和位置实体。

由于EF不会生成personlocation和personrole实体类型,因此不能 在查询中使用。

问题:如何添加Person对象并返回personid,然后将具有3个roleid的id添加到Personrole表/关联中?

e.g。

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

1 个答案:

答案 0 :(得分:2)

当除了FK之外什么都没有时,EF不会需要来映射连接表 - 这是一件好事。在幕后进行“无声加入”非常聪明。

  

问题:如何添加Person对象并返回personid,然后将具有3个roleid的id添加到Personrole表/关联中?

您只需要在“Person”实体上使用“Roles”关联。您无需直接添加到“角色”表中。

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,如果我想添加现有角色(例如Roleid = 1,description =“Editor”)

与上述非常相似。

只需从数据库中获取现有角色,然后将其添加到此人:

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