流畅的 NHibernate 架构问题

流畅的 NHibernate 架构问题

Fluent NHibernate Architecture Question

我有一个问题,我可能在这一点上想多了,但这里是……

我有 2 个类用户和组。用户和组有多对多的关系,我想加入表 group_users 我想要一个 IsAuthorized 属性(因为有些组是私有的——用户需要授权)。

您是否建议为连接表以及用户和组表创建一个类?目前我的class看起来像这样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Groups
{
    public Groups()
    {
        members = new ListPerson();
    }
    ...
    public virtual IListPerson members { get; set; }
}

public class User
{


    public User()
    {
       groups = new Groups()
    }
    ...
    public virtual IListGroups groups{ get; set; }

}

我的映射在两个类中都如下所示(我只在用户映射中显示了一个,但它们非常相似):

1
2
3
4
5
HasManyToManyGroups(x = x.Groups)
.WithTableName("GroupMembers")
.WithParentKeyColumn("UserID")
.WithChildKeyColumn("GroupID")
.Cascade.SaveUpdate();

我应该为看起来像这样的连接表编写一个类吗?

1
2
3
4
5
6
public class GroupMembers
{
    public virtual string GroupID { get; set; }
    public virtual string PersonID { get; set; }
    public virtual bool WaitingForAccept { get; set; }
}

我真的很希望能够调整组成员身份,我想我正在努力思考解决此问题的最佳方法。


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

我还怀疑,通过实现 GroupMembers,您最终会在用户和组类中得到一些讨厌的集合。 IE。组类将具有用户列表以及引用用户的组成员列表,反之亦然。对我来说,这不是那么干净,并且会使维护和传播对表的更改变得更加困难。

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

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


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

干杯。


推荐阅读

    linux命令所有用户?

    linux命令所有用户?,系统,密码,信息,情况,名称,命令,用户,时间,地址,位置,如

    linux命令进入用户?

    linux命令进入用户?,系统,密码,用户,地址,信息,软件,命令,用户名,联系方式,

    linux命令用户管理?

    linux命令用户管理?,系统,密码,管理,工作,信息,地址,工具,命令,用户,基础,LIn

    linux用户与组的命令?

    linux用户与组的命令?,管理,系统,名称,用户组,密码,用户,命令,情况,信息,单

    关于linux命令连接符?

    关于linux命令连接符?,位置,数据,链接,系统,概念,档案,文件,符号,节点,命令,l

    linux连接命令怎么用?

    linux连接命令怎么用?,工作,地址,系统,网络,工具,信息,服务,命令,标准,名字,L

    linux添加用户的命令?

    linux添加用户的命令?,密码,系统,软件,联系方式,用户,新增,信息,管理人员,

    linux看系统用户命令?

    linux看系统用户命令?,系统,信息,密码,命令,服务,名称,网络,情况,软件,工具,L

    linux赋权用户命令?

    linux赋权用户命令?,系统,密码,用户,权限,地址,状态,数字,软件,管理,电脑,Lin

    linux加软连接命令?

    linux加软连接命令?,位置,系统,设备,链接,文件,交通,信息,数据,对比,地方,在L

    linux基本命令授权?

    linux基本命令授权?,系统,工作,信息,命令,工具,状态,一致,管理,管理系统,基

    linux组加用户命令?

    linux组加用户命令?,系统,密码,联系方式,用户,软件,管理,命令,用户名,用户

    linux授权命令执行?

    linux授权命令执行?,系统,工作,数字,权限,文件,概念,标准,命令,目录,用户,在L

    远程命令连接linux?

    远程命令连接linux?,系统,密码,名称,图片,网络,软件,百度,地址,服务,电脑,Lin

    linux命令中添加用户?

    linux命令中添加用户?,系统,密码,软件,用户,命令,信息,目录,用户名,账号,文

    连接linux桌面命令?

    连接linux桌面命令?,系统,软件,工作,密码,电脑,信息,工具,网站,地址,名称,lin

    linux访问连接命令?

    linux访问连接命令?,系统,地址,网络,密码,服务,软件,位置,对外,处分,命令,怎

    linux命令更改用户?

    linux命令更改用户?,系统,密码,管理,用户,命令,环境,工作,地址,电脑,文件,lin

    linux命令行拨号连接?

    linux命令行拨号连接?,系统,网络,软件,手机,服务,密码,地址,名称,电话号码,