无法使用Identity ApplicationUserManager创建新的

时间:2015-07-17 18:06:14

标签: c# entity-framework identity

简要总结我收到的错误信息是:

System.Data.SqlClient.SqlException:无效的对象名称'* NowDeletedDatabase * .dbo._SharedIdentity_UserIds'。

这是抛出它的代码:

    [HttpPost]
    [Authorize(Roles = "Admin, SuperAdmin")]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(Edit model)
    {
        if (!ModelState.IsValid) return View(model);
        var user = new ApplicationUser()
        {
            UserName = model.Email,
            Email = model.Email,
            FirstName = model.FirstName,
            LastName = model.LastName,
            PhoneNumber = model.PhoneNumber
        };
        var result = _userManager.Create(user, model.Password);
        if (result.Succeeded)
        {
            _userManager.Update(user);
            await _userManager.SendEmailAsync(user.Id, "Account Details", "email body text");
        }
        else
        {
            AddErrors(result);
            return View(model);
        }
        return RedirectToAction("UserList", "Account");
    }

当我调用_userManager.Create时,抛出上面的错误(如果我调用CreateAsync甚至尝试使用我的IdentityDbContext .add().saveChanges()方法直接保存到DB,则无关紧要)。

我查看了我的代码并在* NowDeletedDatabase *(ctrl + f整个解决方案)上进行了搜索,并且在我的代码中没有对此DB的引用,所以我对这个引用如何获取感到困惑调用。

此外值得注意的是,在此项目的其他地方,我可以编辑已存在的用户并通过执行_userManager.Update(user)来保存更改;这没有问题。

最后,值得一提的是曾经坐在这个* NowDeletedDatabase * DB中的身份,然后被分割成自己的数据库以及与它一起实现的项目。代码在我进行时被复制粘贴,我开始认为这可能是我问题的根本原因;然而,在我的代码中找不到对这个旧DB的引用并且只是将其与正确的细节交换出来似乎仍然是疯狂的。

更新
配置文件中的相关部分:

网络配置

<configuration>
  <connectionStrings>
    <add name="sharedIdentityConnection" connectionString="Data Source=localhost;Initial Catalog=Shared_Identity;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

<configuration> <connectionStrings> <add name="sharedIdentityConnection" connectionString="Data Source=localhost;Initial Catalog=Shared_Identity;Integrated Security=SSPI;" providerName="System.Data.SqlClient" /> </connectionStrings> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> </configuration> 应用配置:

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>

  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

抱歉格式混乱。

除非我误解了这些连接字符串,否则其中的3个应该都在查看我的localhost,其中一个明确地针对正确的数据库,而其他两个只是针对服务器进行了身份验证。但是我的理解是我的lib类无论如何都会使用web.config文件中指定的连接字符串。

更新2
我刚刚注意到“SharedIdentity”作为错误“'* NowDeletedDatabase * .dbo._SharedIdentity_UserIds'”的一部分从未成为数据库模式的一部分,我对“SharedIdentity”的唯一相关参考是我的lib项目中的一个类,这个类继承了IdentityDbContext,我可以确认在这个类中没有名为UserIds的属性(继承或其他)。

1 个答案:

答案 0 :(得分:0)

原来我的SQL数据库在ASPNETUsers表上有一个触发器设置,它正在调用这个旧数据库。因此错误。

删除此触发器(因为不再需要)解决了我的问题。