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

C# 使用ReadOnlyCollection阻止我建立双向多对多关系,c#,nhibernate,C#,Nhibernate,我使用NHibernate来维持用户和网络之间的多对多关系。我对User和Network类进行了如下设置,将每个类的集合公开为只读集合,以防止直接访问底层列表。我正在努力确保用户可以添加到网络的唯一方式是使用其“JoinNetwork”功能。然而,我似乎不知道如何将用户添加到网络的用户列表中,因为它的集合是只读的 public class User { private ISet<Network> _Networks = new HashedSet<Network

我使用NHibernate来维持用户和网络之间的多对多关系。我对User和Network类进行了如下设置,将每个类的集合公开为只读集合,以防止直接访问底层列表。我正在努力确保用户可以添加到网络的唯一方式是使用其“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();
        }
    }
}
公共类用户
{
专用ISet_Networks=new HashedSet();
公共只读收集网络
{
得到
{
返回新列表(_Networks).AsReadOnly();
}
}
公共网络(网络)
{
_添加(网络);
//如何将当前用户添加到网络的用户列表中?
}
}
公共班级网络
{
私有ISet_Users=new HashedSet();
公共只读集合用户
{
得到
{
返回新列表(_Users).AsReadOnly();
}
}
}

您需要添加一些从类外部访问网络中非只读集合的方法。例如,您可以向其添加公共AddUser方法。如果你真的不想让除你之外的任何人访问它,你可以使用一个内部方法/属性。

我就是这么想的。尽管现在仍然存在有人调用network.AddUser(user)而不是user.JoinNetwork(network)的风险。