实体框架多对多添加/删除对象问题
问题描述:
例如我有人员,位置和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)?
答
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);
THX,如果我想补充现有的角色是什么(例如,角色ID = 1,说明=“编辑器”) – Kiddo 2010-12-22 05:37:01