将 asp.net 5 MVC 6 与 Identity 和 EF 6 一起使用的示例
Posted
技术标签:
【中文标题】将 asp.net 5 MVC 6 与 Identity 和 EF 6 一起使用的示例【英文标题】:Example of using asp.net 5 MVC 6 with Identity and EF 6 【发布时间】:2015-05-31 03:13:56 【问题描述】:我正在使用 asp.net 5 和 MVC 6 设置一个新项目,但由于 EF 7 中缺少功能,我想使用 Entity Framework 6。
我设置了 EF 6.1.3 并且可以正常工作。
Identity 3.0 依赖于 EF 7,因此我已将其删除并在 Identity 2.2 中引用 但我不确定从这里去哪里。
【问题讨论】:
祝你好运在 Google 上为这个 @ShoaibShakeel 找到东西,我也在调查这个问题,你有没有得到任何地方? @Hexxagonal 如果您还在寻找这个答案,请查看我的答案。 【参考方案1】:我不确定在 ASP.NET 5 的最终版本中将如何处理,但对于 ASP.NET 5 RC1,我们有以下内容:
首先,您应该使用 Identity 3.0,因为据我所知,在 MVC 6 中无法使用 Identity 2.x。
其次,要使 Identity 3.0 与 EF6 一起使用,您需要在 Microsoft.AspNet.Identity.EntityFramework 命名空间下实现您自己的“EF6 友好”版本的所有类(代码可在此处获得 - https://github.com/aspnet/Identity/tree/3.0.0-rc1/src/Microsoft.AspNet.Identity.EntityFramework),如原始类仅适用于 EF7:
IdentityDbContext 角色存储 用户存储 身份角色 IdentityRoleClaim 身份用户 IdentityUserClaim 身份用户登录 身份用户角色您的实现应该使用 EF6 而不是 EF7。这个过程非常简单,但如果你想节省时间,我在这里分享了我的实现:
https://github.com/EntrypointSoft/AspNet.Identity.EntityFramework6
【讨论】:
我遵循了你的代码,但它给出了Unable to resolve service for type 'ApplicationDbContext' while attempting to activate 'ApplicationUserStore'.
任何想法的错误。【参考方案2】:
这分为几个部分。
-
您可以使用
Microsoft.AspNet.Identity
3.0.0,但您需要创建自己的UserStore
和RoleStore
。就个人而言,我复制了 UserStore.cs 和 RoleStore.cs 的源代码,并进行了必要的调整以使用我的 EF6 用户和角色类。它们具有一些在 EF6 中默认未使用的附加功能,例如规范化用户名、电子邮件地址和您需要支持(或解决)的角色名称,但这些界面只需要 POCO,因此您会很好。
遵循Identity Sample MVC project,但在您的启动文件中指定您自己的商店:
services.AddIdentity<MyEf6User, MyEf6Role>()
.AddRoleStore<MyEf6RoleStore>()
.AddUserStore<MyEf6UserStore>();
-
请注意,Microsoft.AspNet.Identity(以及所有的 asp.net 5)仍在进行中,诸如不记名令牌之类的东西基本上没有记录,而 Identity 3 确实有一点比 Identity 2.x 设置更多;它需要进行一些调整,并且会针对 CTP 7 和其他未来版本进行更改。
【讨论】:
您是否有任何存储库可以显示此设置是如何创建的?带有 EF6 的身份 3。 不公开,很遗憾。我考虑过制作一个 GitHub 项目和包,但除了您自己可能想要的自定义功能(例如使用用户名作为电子邮件地址)之外,实际上并没有太多其他功能。 致所有来这里寻求建议的人,他们使用带有 EF6 的 Identity 3.0。这种方法有效,但它也需要您将 IdentityUser、IdentityUserClaims 等类完全替换为您自己的非泛型类。问题是 EF6 不支持映射泛型,而 Identity 3.0 代码源广泛支持。【参考方案3】:编辑 1.0.0: Migrator.EF6 现在支持 1.0.0。
编辑 RC2: Migrator.EF6 现在支持 RC2。
最好的做法是将 Identity 的 EF7 提供程序移植到与 EF6 一起使用。
对于已经完成的端口,请查看在 Asp.Net Core (5) 下工作的 Identity 3.0 + EF6:MR.AspNet.Identity.EntityFramework6。
如果您还需要 EF6 迁移,请查看我的其他答案 here。
【讨论】:
【参考方案4】:Here 是一个小型包装器,可将 ASP.NET EntityFrameowork 6 移植到 ASP.NET Core Identity,在一个小文件中。
它的作用是将 EF6 的现有 UserStore
包装在新的不可知论的 ASP.NET Core IUserStore<TUser>
中。
轻松支持TKey
。
【讨论】:
以上是关于将 asp.net 5 MVC 6 与 Identity 和 EF 6 一起使用的示例的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 5 |使用 80 端口托管 MVC 6 项目
在 ASP.NET 5 (vNext) MVC 6 中实现自定义路由器
ASP.Net 5 MVC 6,如何使用共享 Error.cshtml 作为默认错误响应
如何在 Asp.Net 5 (MVC 6) 中使用实体框架 6.x