2010-12-22 4 views
3

예를 들어 두 사람을 연결하는 person, locations 및 personlocation 테이블이 있습니다. 나는 또한 역할과 personrole 테이블이 있습니다.엔티티 프레임 워크 many-to-many 객체 추가/삭제

Tables: 

Person (personid, name) 

Personlocation (personid, locationid) 

Location (locationid, description) 

Personrole (personid, roleid) 

Role (roleid, description) 

EF는 사람, 역할 및 위치 엔티티를 제공합니다.

EF는 personlocation 및 personrole 엔터티 형식을 생성하지 않으므로 을 쿼리에 사용할 수 없습니다.

질문 : Person 객체를 추가하고 personid를 반환 한 다음 Personrole 테이블/연관에 3 개의 roleids가있는이 ID를 어떻게 추가 할 수 있습니까?

즉 좋은 일이 -

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

답변

2

EF는 FK의 아무것도하지만이 없을 때이 테이블을 조인 매핑 할 수 없습니다 필요 않습니다. 무대 뒤에서 "조용한 조인"을하는 것이 현명합니다.

질문 : Person 개체를 추가하고 personid를 반환 한 다음 Personrole 테이블/연결에 3 개의 roleids가있는이 ID를 어떻게 추가 할 수 있습니까?

"사람"엔티티에 "역할"연결 만 사용하면됩니다. "역할"테이블에 직접 추가 할 필요는 없습니다.

는 예컨대 :

// 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.

편집 - 응답에 코멘트하기 : 내가 기존 역할에 추가 할 경우 어떻게

들으, (예를 들어 역할 ID = 1, 설명 = "편집기")

매우를 위와 비슷합니다.

는 그냥 DB에서 기존 역할을 가져, 그 사람에 추가 :

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

들으, 나는 기존 역할에 추가 할 경우 어떻게 (예 : 역할 ID = 1, 설명 = "편집기") – Kiddo

+0

@ Kiddo - 답변이 수정되었습니다. – RPM1984

+0

thx, 만약 내가 roleids의 컬렉션을 추가하고 싶다면, 나는 그렇게함으로써 에러가 발생한다 : Role r = ctx.Roles.Where (x => x.RoleId == 1 && x.x.RoleId == 2); p.Roles.Add (r); – Kiddo