使用ASP.NET 5 MVC 6与Identity和EF 6的示例

9

我正在使用asp.net 5和MVC 6创建一个新项目,但由于EF 7缺失的功能,我想使用Entity Framework 6。

我安装了EF 6.1.3并且它已经可以使用了。

Identity 3.0依赖于EF 7,因此我已将其删除并引用了Identity 2.2,但我不确定接下来该做什么。


祝你在Google上找到相关内容好运 @ShoaibShakeel 我也在研究这个问题,你有什么进展吗? - scottheckel
@Hexxagonal 如果你还在寻找答案,可以看一下我的回答。 - mrahhal
4个回答

4
在ASP.NET 5 RC1中,我不确定在正式版ASP.NET 5中会如何处理此问题,但有以下注意事项:
首先,您应该使用Identity 3.0,因为据我所知,在MVC 6中没有使用Identity 2.x的方法。
其次,要使Identity 3.0与EF6配合使用,您需要实现Microsoft.AspNet.Identity.EntityFramework命名空间下所有类的“EF6-friendly”版本(代码可在此处找到:https://github.com/aspnet/Identity/tree/3.0.0-rc1/src/Microsoft.AspNet.Identity.EntityFramework)。原始类仅适用于EF7:
- IdentityDbContext - RoleStore - UserStore - IdentityRole - IdentityRoleClaim - IdentityUser - IdentityUserClaim - IdentityUserLogin - IdentityUserRole 您的实现应使用EF6而非EF7。该过程非常简单,但如果想节省时间,可以在此处找到我的实现:https://github.com/EntrypointSoft/AspNet.Identity.EntityFramework6

我按照你的代码进行操作,但出现了错误:“尝试激活'ApplicationUserStore'时无法解析服务类型'ApplicationDbContext'。” 你有什么想法? - Karthick

2

1.0.0版本更新说明: Migrator.EF6现在支持1.0.0。


RC2版本更新说明: Migrator.EF6现在支持RC2。


最好的做法是将Identity的EF7提供程序移植到EF6中运行。

如果您需要已完成的移植,请查看此处的Identity 3.0 + EF6工作在Asp.Net Core (5)下:MR.AspNet.Identity.EntityFramework6

如果您还需要EF6迁移,请查看我的另一个答案这里


2
这有几个部分。
  1. 您可以使用 Microsoft.AspNet.Identity 3.0.0,但需要自己制作 UserStore 和 RoleStore。个人而言,我复制了 UserStore.csRoleStore.cs 的源代码,并进行了必要的调整以使用我的 EF6 用户和角色类。它们具有一些默认情况下在 EF6 中未使用的其他功能,例如规范化用户名、电子邮件地址和角色名称,您需要支持(或解决),但接口只需要 POCO,所以您会很好。
  2. 按照 Identity Sample MVC project,但在您的 Startup 文件中指定自己的 Stores:
services.AddIdentity<MyEf6User, MyEf6Role>()
    .AddRoleStore<MyEf6RoleStore>()
    .AddUserStore<MyEf6UserStore>();

非常注意,Microsoft.AspNet.Identity(以及所有asp.net 5)仍然是正在进行中的工作,例如bearer token很大程度上没有文档,Identity 3比Identity 2.x需要更多的设置; 它需要一些调整,并且将在CTP 7和其他未来版本中进行更改。

你有没有任何展示如何创建这个设置的代码库?使用EF6的Identity 3。 - Bart Calixto
很遗憾,这不是公开的。我考虑过创建一个GitHub项目和软件包,但实际上除了你可能想要的自定义(例如将用户名用作电子邮件地址)之外,没有太多内容。 - Matt DeKrey
1
对于任何使用Identity 3.0与EF6的建议前来此处的人,这种方法是可行的,但它也要求您完全替换IdentityUser、IdentityUserClaims等类为您自己的非泛型类。问题在于,EF6不支持映射泛型,而Identity 3.0代码源广泛使用泛型。 - jods

0

这里有一个小包装器,将ASP.NET EntityFramework 6移植到ASP.NET Core Identity中,只需一个小文件。

它的作用是将现有的EF6 UserStore包装在新的通用ASP.NET Core IUserStore<TUser>中。

支持TKey变得更加容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接