首先使用现有的aspnet成员资格模式和新的ASP.NET MVC数据库

时间:2017-12-01 05:20:48

标签: asp.net-mvc entity-framework migration asp.net-identity sqlmembershipprovider

我在这里寻找一些指导......我有一个旧的ASP.NET webforms网站,它有一个现有的数据库和SQL Server成员资格,我正在使用ASP.NET MVC创建一个新的界面实体框架采用数据库优先方法。

所以我有如下表所示的表格:

membership tables - how to use in MVC?

我的问题是,我不确定如何在新的ASP.NET MVC应用程序中使用这些旧的成员资格表进行身份验证。

我不介意将用户/角色数据迁移到ASP.NET身份还是继续使用旧的成员资格数据库,但我不确定最佳方法是什么。我想我更愿意迁移数据,因为我更熟悉Identity。

我尝试过的事情......

在搜索解决方案时,我已经多次遇到过这个问题:Migrating an Existing Website from SQL Membership to ASP.NET Identity,但是这一点(以及我迄今为止发现的大部分内容)都在谈论升级现有的webforms网站以使用asp.net身份。我已经尝试使用它的一部分将会员数据迁移到asp.net身份,但当然剩下的指示不适合我的场景。

所以我现在在这里。

  1. 我使用上面链接的演练中的SQL脚本将成员资格数据迁移到asp.net身份表。

  2. 我已按照演练中的说明设置了SQLPasswordHasher,因为我认为我需要使用该功能来使用现有登录。

  3. 我将这些表导入到包含网站数据的数据库中,希望我只需要处理一个连接字符串。

  4. 我修改了ApplicationDbContext : base ...以使用该数据库(之前使用的是DefaultConnection(LocalDb)

  5. 所以现在我将这些表填充了数据:

    enter image description here

    Aaand我被困住了。

    我完全有可能错过一些基本的东西,但无论如何,如果我尝试登录或注册新用户,我会收到错误:

      

    实体类型ApplicationUser不是当前上下文模型的一部分。

    就行:

    var result = await UserManager.CreateAsync(user, model.Password);`
    

    我唯一能够找到该错误的解决方案就是代码优先项目:与迁移有关的事情,我没有使用(我确实尝试了但收到了错误)启用 - 迁移"不支持从使用数据库优先或模型优先创建的DbContext创建DbModelBuilder或编写EDMX。")

    更新 好的,所以我遇到了关于The entity type ApplicationUser is not part of the model for the current context.错误的答案,显然使用实体框架生成的连接字符串可能会有问题,所以建议我做一个正常的'连接字符串,这似乎越来越近了!

    更新2

    我认为我有它工作,但在使用我的解决方案进行更新之前会进行一些测试。

1 个答案:

答案 0 :(得分:1)

请按照以下步骤执行此操作。

  1. 使用用户身份验证创建新的ASP.NET MVC项目。
  2. 现在右键单击Model文件夹并添加一个新项目" ADO.NET Entity Data model"输入您的型号名称并选择确定现在选择数据库第一种方法并提供您的数据库名称和连接以及要保存在web.config文件中的连接名称。
  3. 现在转到您的web.config文件,您将看到连接字符串中定义了两个连接,每个连接指向不同的数据库,一个用于IDENTITY,另一个用于刚刚添加的数据库。 例如: enter image description here
  4. 您需要将两个连接的数据源更改为相同。
  5. 因此,无论何时您需要访问用户信息,您都需要使用ApplicationDbContext,而对于其他人,您可以使用' CustomConn'您在添加新模型时已定义的上下文。
  6. 希望这会对你有帮助!