2010-04-02 3 views
1

나는 NHibernate를 사용하여 사용자와 네트워크 간의 다 대다 관계를 지속합니다. 다음과 같이 User 클래스와 Network 클래스를 모두 설정하여 각 컬렉션을 ReadOnlyCollections로 노출하여 기본 목록에 직접 액세스하지 못하도록합니다. 사용자를 네트워크에 추가 할 수있는 유일한 방법은 "JoinNetwork"기능을 사용하는 것입니다. 그러나 수집이 읽기 전용이므로 사용자의 네트워크 목록에 사용자를 추가하는 방법을 알아낼 수 없습니다.ReadOnlyCollection을 사용하여 양방향 다 대다 관계를 설정하지 못하게 함

public class User  
{ 
    private ISet<Network> _Networks = new HashedSet<Network>(); 
    public ReadOnlyCollection<Network> Networks 
    { 
     get 
     { 
      return new List<Network>(_Networks).AsReadOnly(); 
     } 
    } 

    public void JoinNetwork(Network network) 
    { 
     _Networks.Add(network); 

     // How do I add the current user to the Network's list of users? 
    } 
} 

public class Network 
{ 
    private ISet<User> _Users = new HashedSet<User>(); 
    public ReadOnlyCollection<User> Users 
    { 
     get 
     { 
      return new List<User>(_Users).AsReadOnly(); 
     } 
    } 
} 

답변

2

외부에서 네트워크의 읽기 전용 컬렉션에 액세스 할 수있는 방법을 추가해야합니다. 예를 들어 공용 AddUser 메서드를 추가 할 수 있습니다. 만약 당신이 정말로 당신 옆에있는 다른 사람에게 접근하고 싶지 않다면, 당신은 내부 방법/속성을 사용할 수 있습니다.

+0

내가 생각한 것입니다. user.JoinNetwork (네트워크) 대신 network.AddUser (사용자)를 호출하는 사람의 위험은 여전히 ​​존재하지만. –

관련 문제