使用ReadOnlyCollection阻止我建立双向多对多关系

时间:2010-04-02 13:41:02

标签: c# nhibernate

我正在使用NHibernate来维护用户和网络之间的多对多关系。我按如下方式设置了User和Network类,将每个集合公开为ReadOnlyCollections以防止直接访问底层列表。我正在努力确保将用户添加到网络的唯一方法是使用其“JoinNetwork”功能。但是,我似乎无法弄清楚如何将用户添加到网络的用户列表,因为它的收集是只读的。

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();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您需要添加一些从类外部访问Network中非读取集合的方法。例如,您可以向其添加公共AddUser方法。如果您真的不希望任何人访问您,您可以使用内部方法/属性。