更改ASP.NET标识以使用现有数据库
我正在使用ASP.NET MVC 5和Database-First工作流程。 我已经在我现有的数据库中创建了身份表( AspNetUsers
, AspNetRoles
等),但是我在使注册和登录function正常工作时遇到了问题。
这是IdentityModels.cs
类
public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext() : base("MyConnectionString") // I use "MyConnectionString" instead of "DefaultConnection" { }
这是来自web.config
的EF连接字符串的样子
为了更好地衡量,这里是从edmx生成的上下文类
public partial class MyConnectionString : DbContext { public MyConnectionString() : base("name=MyConnectionString") { }
对我来说似乎都很好,它应该能够在数据库中创建用户但是我在登录或尝试分别注册时收到以下错误:
登录:
实体类型ApplicationUser不是当前上下文的模型的一部分
第73行:var result = await SignInManager.PasswordSignInAsync(model.Email,model.Password,model.RememberMe,shouldLockout:false);
exception详细信息:System.InvalidOperationException:实体类型ApplicationUser不是当前上下文的模型的一部分。
注册:
实体类型ApplicationUser不是当前上下文的模型的一部分
第155行:var result = await UserManager.CreateAsync(user,model.Password);
exception详细信息:System.InvalidOperationException:实体类型ApplicationUser不是当前上下文的模型的一部分。
大多数文章似乎都集中在Code-First以及如何从LocalDb转到SQLExpress等以及如何更改连接字符串,但是我无法在很长一段时间内解决这个问题。
编辑,解决方案 :正如@ChrFin所提到的,你可以将它们并排使用,这就是我最终要做的事情。 我只是在web.config
添加了一个新的常规连接字符串,并让它指向现有的数据库。 PS。 请记住,连接字符串名称不能与现有名称相同,并且必须与您提供给ApplicationDbContext
构造函数的名称相同。
我认为ASP.NET身份不支持这种情况,因为它需要一个扩展IdentityDbContext
(或类似)的DbContext
。
为什么要强制标识进入DB-First上下文?
你可以使用Code-First上下文用于Identity和你的其他DB-First上下文没有问题……
您可以按照以下步骤解决此问题:
- 1 – 在您的数据库上创建aspnetuser等表(无论您要使用哪个DB)
- 简单地使用entity framework将应用程序与该数据库连接起来,我只是说简单的连接。
-
你会在web.config文件中找到连接字符串。
-
将此连接字符串放入标识模型clss中
- 您的注册和令牌方法现在正在运行
- 现在,您可以通过数据优先方法将实体framewoek用于表的其余部分
- ASP身份2 + Web API令牌身份validation – 持久声明未加载
- Asp.Net Identity 2.0 – 如何使用SmtpClient实现IIdentityMessageService来执行异步SMTP?
- 在用Identity注册时为用户设置角色的正确方法
- 如何在ASP .NET MVC 5中为AspNetUser创建SecurityStamp
- 获取ASP.NET MVC5身份系统中的所有角色名称
- 如何解决ASP.NET MVC Kendo UI网格中的CRUD操作问题
- 如何将MVC 5身份validation添加到Unity IoC?
- 充分利用具有n(3)层架构的MVC Owin身份
- 网站初始化时创建默认用户/管理员 – 身份