更改ASP.NET标识以使用现有数据库

时间:2014-09-16 10:45:02

标签: c# asp.net-mvc entity-framework asp.net-identity

我使用ASP.NET MVC 5和Database-First工作流程。我已经在现有数据库中创建了身份表(AspNetUsersAspNetRoles等)但是我在获取注册时遇到了问题登录功能以正常工作。

这是IdentityModels.cs

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("MyConnectionString") // I use "MyConnectionString" instead of "DefaultConnection" 
    {
    }

这是来自web.config的EF连接字符串

<connectionStrings><add name="MyConnectionString" connectionString="metadata=res://*/Entities.MyModel.csdl|res://*/Entities.MyModel.ssdl|res://*/Entities.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=My-Pc\SQLEXPRESS;initial catalog=MyExistingDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

为了更好地衡量,这里是从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);

     

异常详细信息:System.InvalidOperationException:实体类型   ApplicationUser不是当前上下文模型的一部分。

注册:

  

实体类型ApplicationUser不是该模型的一部分   当前背景

     

第155行:var result = await UserManager.CreateAsync(user,   model.Password);

     

异常详细信息:System.InvalidOperationException:实体类型   ApplicationUser不是当前上下文模型的一部分。

大多数文章似乎都专注于Code-First以及如何从LocalDb转到SQLExpress等以及如何更改连接字符串但是我还没有能够在很长一段时间内解决这个问题

编辑,解决方案:正如@ChrFin所提到的,你可以将它们并排使用,这就是我最终要做的事情。我只是在web.config中添加了一个新的regular连接字符串,并让它指向现有的数据库。 PS。请记住,连接字符串名称不能与现有名称相同,并且必须与ApplicationDbContext构造函数相同。

2 个答案:

答案 0 :(得分:5)

我认为ASP.NET身份不支持这种情况,因为它需要DbContext扩展IdentityDbContext<ApplicationUser>(或类似)。

为什么要强制身份进入DB-First环境? 你可以使用Code-First上下文用于Identity以及其他DB-First上下文而不会出现问题...

答案 1 :(得分:0)

您可以按照以下步骤解决此问题:

  • 1 - 在您的数据库上创建aspnetuser等表(无论您想要什么数据库) 使用)
  • 只是将应用程序与该数据库连接而不是使用实体框架,我只是简单的连接。
  • 您将在web.config文件中找到连接字符串。

  • 将此连接字符串放入标识模型clsss

  • 您的注册和令牌方法正在运行
  • 现在,您可以通过数据第一种方法
  • 将实体framewoek用于表格的其余部分