В кратком изложении сообщение об ошибке я получаю это:Невозможно создать новый с помощью удостоверений ApplicationUserManager
System.Data.SqlClient.SqlException: Invalid имя объекта '* 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()).
Я просмотрел свой код и выполнил поиск по * NowDeletedDatabase * (ctrl + f Entire Solution), и в моем коде нет ссылок на эту БД, поэтому я недоумеваю, как эта ссылка вызывается.
Кроме того, стоит отметить, что в другом месте этого проекта я могу редактировать пользователей, которые уже существуют и сохранять изменения, выполняя _userManager.Update (пользователь); и это работает без проблем.
Наконец, стоит упомянуть личность, когда-то сидевшую в этой * NowDeletedDatabase * DB, прежде чем разделить ее на свою БД вместе с проектом, который был реализован вместе с ним. Код был скопирован, когда я шел, и я начинаю думать, что это может быть основной причиной моих проблем; однако по-прежнему кажется безумием, что я не могу найти ссылку на эту старую БД в своем коде и просто поменять ее на правильные детали.
Update
соответствующие разделы конфигурационных файлов:
Web Config
<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>
App конфигурации:
<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>
жаль грязный форматирования.
Если я не понимаю эти строки подключения, все из них должны смотреть на мой локальный хост, из которых 1 из них явно нацеливается на правильный БД, а два других просто аутентифицируются на сервере. Однако я понимаю, что мой класс lib будет использовать строку соединения, указанную в файле web.config.
Update 2
Я только заметил, что «SharedIdentity» как часть ошибки «„* NowDeletedDatabase * .dbo._SharedIdentity_UserIds“» никогда не был частью схемы базы данных, только соответствующая ссылка, которую я должен «SharedIdentity» - это класс в моем проекте lib, этот класс наследует IdentityDbContext, и я могу подтвердить, что в этом классе нет свойства UserIds (унаследовано или иначе).
У вас нет двух разных строк подключения? Возможно, вы попали в свою новую базу данных, а другую в более старую базу данных? Я знаю, что вы выполнили поиск, но, возможно, этот файл был создан в экземпляре localdb? Из того, что я читал, я считаю, что вы обновляете и креатин в двух разных проектах? –
У меня была двойная проверка моих файлов конфигурации и добавлены соответствующие части выше. Я определенно не явно нацелен на эту старую БД. Также просто уточнить, что мои функции редактирования функциональны и в рамках одного и того же проекта в решении. – Lee