流利的NHibernate架构问题
时间:2020-03-05 18:54:57 来源:igfitidea点击:
我有一个问题,我可能会在这一点上进行思考,但是这里...
我有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; } }
我真的很希望能够调整组成员身份,并且我想我正在考虑实现此目的的最佳方法。
解决方案
回答
是的,请确保我们需要另一个类,例如UserGroupBridge。另一个好的副作用是,我们可以修改用户成员资格和组成员,而无需将可能很重的User / Group对象加载到NHibernate会话中。
干杯。
回答
我通常只喜欢创建代表实际业务实体的类。在这种情况下,我认为" groupmembers"在代码中不代表任何有价值的东西。对我来说,ORM应该将数据库映射到业务对象。这意味着类不必完全镜像数据库布局。
我也怀疑通过实现GroupMembers,我们最终将在用户和组类中出现一些讨厌的集合。 IE。组类将具有用户列表以及引用用户的组成员列表,反之亦然。对我来说,这还不是很干净,会使维护和将更改传播到表变得更加困难。
我建议按照建议将联接表保留在数据库中,并在用户中添加一个名为waitingtoaccept的组列表,(如果也可以)在组中添加一个名为waitingtoaccept的用户列表。
然后,这些将根据waitingtoaccept标志从数据库的联接表中拉出它们的值。