2010-04-02 95 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

您需要添加某种方式从类的外部访问Network中的非只读集合。例如,您可以添加一个公共的AddUser方法。如果你真的不希望任何人在你之外访问它,你可以使用内部方法/属性。

+0

这就是我的想法。虽然现在仍然有人调用network.AddUser(用户)而不是user.JoinNetwork(网络)的风险。 – 2010-04-02 13:46:42