我即将将Identity Microsoft.AspNet.Identity.EntityFramework
项目(v 2.0.0.0)转换为使用NHibernate作为其持久性机器的项目。我的第一个绊脚石'是UserStore
类中的这组存储库:
private readonly IDbSet<TUserLogin> _logins;
private readonly EntityStore<TRole> _roleStore;
private readonly IDbSet<TUserClaim> _userClaims;
private readonly IDbSet<TUserRole> _userRoles;
private EntityStore<TUser> _userStore;
类型参数TUser
被约束为IdentityUser<TKey, TUserLogin, TUserRole, TUserClaim>
,此类型有自己类似的集合集:
public virtual ICollection<TRole> Roles { get; private set; }
public virtual ICollection<TClaim> Claims { get; private set; }
public virtual ICollection<TLogin> Logins { get; private set; }
如果我只需管理TUser
的一个存储库,我的生活就会容易得多,因为每个用户都已经处理好自己的东西。是否有任何重要原因我不能废除这些(为了消除对实体框架的任何依赖,例如DbSet
?
我可以设法使用我自己的存储库类代替DbSet
以符合UserStore
的这种设计,但我更愿意丢失它们并让每个用户实例处理它自己的声明等
答案 0 :(得分:6)
其他DbSet
类用于保存与用户声明,角色和登录相关的数据,而ICollection
字段是导航属性,允许您通过当前读取这些表中的数据选定的用户。
如果您要完全转换身份框架(以及上帝速度给您),您将需要这些数据库实体来管理这些数据。
但是,您可以拥有一个User
存储库,该存储库可以公开对其声明,角色和登录的访问,从而使其更简单。