2010-07-14 2 views
0

나는 EF4와 함께 POCO를 사용하고 있으며 일부 엔터티는 다 대 다 관계에 있으며 내 경우에는 User 클래스 개체와 PrivilegeGroup 클래스 개체입니다.POCO를 사용하여 다 대다 관계의 엔터티를 삭제하는 방법

public class User 
{ 
    public int UserID { set; get; } 
    public string UserName { get; set; } 
    public string UserPassword { get; set; } 
    public bool IsActive { get; set; } 

    public List<PrivilegeGroup> PrivilegeGroups { get; set; } 
} 

그리고이 같은 클래스 PrivilegeGroup 보이는 방법은 다음과 같습니다 : 다음과 같이 내가 ObjectContext를 클래스 을 확장 한

public class PrivilegeGroup 
{ 
    public int PrivilegeGroupID { get; set; } 
    public string Name { get; set; } 

    public List<User> Users { get; set; } 
    public List<HasPrivilege> HasPrivileges { get; set; } 
} 

: 클래스 사용자가 같은 모양을

이입니다

public class AdminMDSContext : ObjectContext 
{ 

    public AdminMDSContext(string connectionString) 
     : base(connectionString) 

    { 
     this.DefaultContainerName = "MDSUsers_Entities"; 
     _users = CreateObjectSet<User>(); 
     _privilegeGroups = CreateObjectSet<PrivilegeGroup>(); 

    } 


    private ObjectSet<User> _users; 
    private ObjectSet<PrivilegeGroup> _privilegeGroups; 

    public ObjectSet<User> Users 
    { 
     get { return _users; } 
    } 


    public ObjectSet<PrivilegeGroup> PrivilegeGroups 
    { 
     get { return _privilegeGroups; } 
     set { _privilegeGroups = value; } 
    } 

} 

이러한 항목의 쿼리 및 삽입은 정상적으로 작동하지만 삭제 DB 왕복없이 하나의 사용자로부터 PrivilegeGroup을 제거하고 싶지만 그 방법을 모르겠습니다.

아무도 도와 줄 수 있습니까?

+0

무엇을 시도 했습니까? 그것은 나에게 'yourUser.PrivilegeGroups.Remove (yourPrivilegeGroup)'; context.SaveChanges();'작업을 수행해야하지만 틀릴 수도 있습니다. 실제로 삭제를 수행하려고 시도한 것에 대한 코드를 보여줄 수 있습니까? context.Users 미국에서 사용 –

+0

(AdminMDSContext 컨텍스트 = 새로운 AdminMDSContext (GetConnStringHTMLDecoded())) { VAR usVar = \t us.UserID가 == userId를 \t 우릴 여기서 선택; 사용자 사용자 = usVar.SingleOrDefault (); var pgVar = 컨텍스트의 pg에서 .PrivilegeGroups 여기서 pg.PrivilegeGroupID == privilegeGroupId select pg; PrivilegeGroup privilegeGroup = pgVar.SingleOrDefault (); if (user.PrivilegeGroups == null) {user.PrivilegeGroups = new List ();} user.PrivilegeGroups.Add (privilegeGroup); user.PrivilegeGroups.Remove (privilegeGroup); context.SaveChanges(); } –

+0

잘,이 코드는 확실히 유망 해 보이지 않습니다. 짧은 이야기를 잘라내려면 필요한 ID로 필터링 된 데이터로 개체를 만들었습니다. 사용자 클래스 개체는 List 을 초기화 한 다음 추가 및 제거했습니다. PrivilegeGroup 객체. 그 후, 나는 상황에 대한 변화를 저장했다. 그리고 나는 하나의 사용자와 하나의 PrivilegeGroup을 찾기 위해 데이터베이스에 두 개의 쿼리를 가지고 있었고 나는 삭제 된 SQL 쿼리를 가지고 있지 않았다. 반대, 그냥 삭제 SQL 쿼리를 실행 싶어요. 내가 여기서 뭘 잘못하고 있는지 모르겠다. –

답변

3

흥미로운 질문입니다. 여기에 어떻게해야할까요?

var user = new User { UserId = 1 }; 
var admin = new Privilege { PrivilegeId = 1 }; 
user.Privileges.Add(admin); 
db.Users.Attach(user); 
user.Privileges.Remove(admin); 
db.SaveChanges(); 

동일한 문제를 해결하기 위해 총 4 가지 접근법이 있습니다. 그러나 나는 무엇을 말하고있는 것인가로 충분하다고 생각하지만 더 많은 정보가 필요하다면 우편으로 직접 ping 할 수 있습니다

+0

고맙습니다, zeeshanhirani! 비록 한 가지가 있었지만 두 줄을 더 추가해야했습니다. if (user.Privileges == null) user.Privileges = new List (); –

+0

나는이 같은 질문을 ... 나는 ObjectContext/ObjectSets을 직접 다루지 않을 것이다. 다른 3 가지 접근법에 대해 자세히 설명해 주시겠습니까? 감사. – Jeff

관련 문제