2015-07-17 2 views
0

В кратком изложении сообщение об ошибке я получаю это:Невозможно создать новый с помощью удостоверений 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 (унаследовано или иначе).

+0

У вас нет двух разных строк подключения? Возможно, вы попали в свою новую базу данных, а другую в более старую базу данных? Я знаю, что вы выполнили поиск, но, возможно, этот файл был создан в экземпляре localdb? Из того, что я читал, я считаю, что вы обновляете и креатин в двух разных проектах? –

+0

У меня была двойная проверка моих файлов конфигурации и добавлены соответствующие части выше. Я определенно не явно нацелен на эту старую БД. Также просто уточнить, что мои функции редактирования функциональны и в рамках одного и того же проекта в решении. – Lee

ответ

0

Оказывается, у моего SQL db была установлена ​​триггерная настройка в таблице ASPNETUsers, которая вызывала эту старую БД. Таким образом, ошибка.

Удаление этого триггера, поскольку оно больше не требуется, разрешило мою проблему.

Смежные вопросы