使用实体框架在现有数据库中实现asp.net Identity

Zap*_*ica 5 c# asp.net asp.net-mvc entity-framework asp.net-identity-2

我正在尝试更新旧的网站。它已经具有一个带有用户和角色表的现有数据库,其中包含现有数据。

我需要创建一个新的Web-api和一个新的Web项目,并将ASP.NET Identity集成到现有数据库中。

目前,我已经设置了解决方案来分解项目,如下所示:

  • 服务
  • WEB_API
  • WEB_UI

我的目标是在服务层中实现身份,以便我的WebAPI和MVC站点都可以利用相同的身份机制。

目前,我很不知所措,在过去的一两天内,我已经阅读了许多教程和文章,并最终选择了重新实现IUserStoreand IRoleStore。并且还可以映射中的不同实体OnModelCreatingMethod

我似乎找不到针对我想要做的教程。我的数据库与众不同,只是简单地重新映射列的名称,而且我不想重新实现整个身份存储,因为只有几个冲突的字段。我发现的大多数tut与使用mysql而不是EF有关。我仍然想使用实体框架。

我遇到的问题:

  • 数据库中的当前用户表使用Intpk,而不是GUID
  • 密码字段使用不同的哈希算法。因此,我需要重写Identity如何检查和存储密码。
  • 我的数据库中没有所有必填的“身份用户”字段,但是我能够添加新字段,只是无法更改现有字段。
  • 由于数据库已经存在,因此我正在使用数据库优先。

所以基本上我的问题是,为了克服上述问题,我需要朝哪个方向前进。我可以放弃更改数据库映射吗?还是我需要重新实现用户和角色存储?

我最初计划的是使用实体框架重新实现用户和角色存储,然后我可以利用数据库的第一个模型类并将实际的数据库结构和字段映射到我的ApplicationUser字段。但是,这是我以为我可能会潜入冷水的地方,如果没有必要,我通常不喜欢重新发明轮子。

mym*_*n78 4

- 如果您还没有这样做,您应该做的第一件事就是备份您当前的数据库!

您可以首先使用代码来更新现有数据库。

我找到了这个演练,它似乎与您所走的路线很接近,我希望它能帮助解决您的问题,从“迁移到 Visual Studio 2013”​​开始。 http://www.asp.net/identity/overview/migrations/migration-an-existing-website-from-sql-membership-to-aspnet-identity

这将创建一些新表,但不一定是新数据库。

下载 Nuget 包:Microsoft.AspNet.Identity.EntityFramework、Microsoft.AspNet.Identity.Owin、Microsoft.Owin.Host.SystemWeb

启用迁移并运行如下脚本: https: //aspnet.codeplex.com/SourceControl/latest#Samples/Identity/SQLMembership-Identity-OWIN/Migrations.sql

或者您可以尝试使用 Visual Studio 扩展中的反向 POCO 生成器。

(我第一次尝试在这里写答案。试图澄清。)