Fluent-NHibernate体系结构问题

Fluent-NHibernate体系结构问题,nhibernate,architecture,fluent,Nhibernate,Architecture,Fluent,我有一个问题,我可能在这一点上想得太多了,但接下来 我有两个类用户和组。用户和组之间存在多对多关系,我认为我想要的联接表组用户具有未授权属性(因为某些组是私有的,用户需要授权) 您是否建议为join表以及User和Groups表创建一个类?当前我的类如下所示 public class Groups { public Groups() { members = new List<Person>(); } ... public vir

我有一个问题,我可能在这一点上想得太多了,但接下来

我有两个类用户和组。用户和组之间存在多对多关系,我认为我想要的联接表组用户具有未授权属性(因为某些组是私有的,用户需要授权)

您是否建议为join表以及User和Groups表创建一个类?当前我的类如下所示

public class Groups
{
    public Groups()
    {
        members = new List<Person>();
    }
    ...
    public virtual IList<Person> members { get; set; }
}

public class User
{


    public User()
    {
       groups = new Groups()
    }
    ...
    public virtual IList<Groups> groups{ get; set; }

}

我真的很想能够调整集团成员身份,我想我正在努力想一个最好的办法来实现这一点

是的,您确实需要另一个类,比如UserGroupBridge。另一个好的副作用是,您可以修改用户成员资格和组成员,而无需将可能很重的用户/组对象加载到NHibernate会话


干杯。

我通常只喜欢创建表示实际业务实体的类。在这种情况下,我不认为“groupmembers”在代码中代表任何有价值的东西。对我来说,ORM应该将数据库映射到您的业务对象。这意味着您的类不必完全镜像数据库布局

我还怀疑,通过实现GroupMembers,您的用户和组类中都会出现一些令人讨厌的集合。也就是说,对于用户类,group类将有一个用户列表和一个引用用户的groupmembers列表,反之亦然。对我来说,这并没有那么干净,并且会使维护和传播表的更改变得更加困难

我建议按照您的建议将联接表保留在数据库中,并在用户中添加一个名为waitingtoaccept的组列表,以及(如果有意义的话)在组中添加一个名为waitingtoaccept的用户列表

然后,它们将根据waitingtoaccept标志从数据库中的联接表中提取它们的值

HasManyToMany<Groups>(x => x.Groups)
.WithTableName("GroupMembers")
.WithParentKeyColumn("UserID")
.WithChildKeyColumn("GroupID")
.Cascade.SaveUpdate();
public class GroupMembers
{
    public virtual string GroupID { get; set; }
    public virtual string PersonID { get; set; }
    public virtual bool WaitingForAccept { get; set; }
}