简要总结我收到的错误信息是:
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的属性(继承或其他)。
答案 0 :(得分:0)
原来我的SQL数据库在ASPNETUsers表上有一个触发器设置,它正在调用这个旧数据库。因此错误。
删除此触发器(因为不再需要)解决了我的问题。