【发布时间】:2016-03-20 06:00:17
【问题描述】:
我即将将 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 的这种设计,但我更愿意只是丢失它们并让每个用户实例处理自己的声明等。
【问题讨论】:
-
有许多将其他数据库技术与 Identity Framework 结合使用的示例。英孚只是提供者之一。例如,已经有 4 个现有的 nHibernate 示例,请参阅:nuget.org/… - 此外,其中一些还有源代码。例如:github.com/MatthewRudolph/Airy
-
我为 HNibernate 找到的第一个,最突出的项目迫使我在一个完全通用的系统中使用字符串键,这是我认为不可接受的标准,我的任务是使用我们现有的 NHibernate 自定义 DAL为了身份的持久性,所以我觉得最好,也最有趣,做自己。当然,我会查看您引用的示例以获取灵感,谢谢。
标签: c# asp.net entity-framework nhibernate asp.net-identity