将 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,但您需要创建自己的UserStoreRoleStore。就个人而言,我复制了 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&lt;TUser&gt; 中。

轻松支持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

如何将 asp.net mvc 5 与最新的 Paypal checkout .net sdk v2 集成?

ASP.NET 5 MVC 6 中的单选按钮标记帮助程序