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