我有一个问题,我现在可能已经在思考了,但这里有......
我有2个类用户和组。用户和组之间存在多对多关系,我认为联接表group_users我想拥有一个IsAuthorized属性(因为某些组是私有的 - 用户需要授权)。
您是否建议为连接表以及用户和组表创建一个类?目前我的类看起来像这样。
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; }
}
我的映射在两个类中都是如下所示(我只是在用户映射中显示它,但它们非常相似):
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; }
}
我真的希望能够调整群组成员身份,我想我正在考虑最好的方法来解决这个问题。
答案 0 :(得分:1)
是的,确定您需要另一个类,如UserGroupBridge。另一个好的副作用是您可以修改用户成员资格和组成员,而无需将可能繁重的用户/组对象加载到NHibernate会话。
干杯。
答案 1 :(得分:1)
我通常只喜欢创建代表实际业务实体的类。在这种情况下,我不认为'groupmembers'代表代码中的任何有价值的东西。对我来说,ORM应该将数据库映射到您的业务对象。这意味着您的类不必完全镜像数据库布局。
此外,我怀疑通过实现GroupMembers,您将在用户和组类中结束一些讨厌的集合。 I.E.组类将具有用户列表以及引用用户的组成员列表,反之亦然。对我来说,这不是那么干净,并且会使更难维护和传播对表的更改。
我建议按照你的建议将连接表保存在数据库中,并在用户中添加名为waitingtoaccept的组列表,并且(如果有意义的话)在组中添加名为waitingtoaccept的用户列表。
然后,这些将根据waitingtoaccept标志从数据库中的join-table中提取它们的值。