Я работаю над сайтом MVC, использующим идентификатор ASP.Net для входа в систему.MVC Asp.NET Identity Неизвестная ошибка Произошла ошибка
Существует таблица пользователей, где pk является FK для другой таблицы (таблица 2). Из-за этого пользователь не может быть удален. Кроме того, есть отчеты, которые генерируются из таблицы 2. В этом отчете отображаются данные из таблицы 2 до тех пор, пока имя пользователя, сгенерировавшее данные. Другая причина, по которой удаление информации пользователя не должно выполняться.
Таким образом, вместо того, чтобы удалять пользователя, я подумал, что добавлю столбец в таблицу пользователя, названную «Deleted». Он использует бит типа данных.
Этот столбец был добавлен в мою локальную копию базы данных с использованием первых кодов миграции. Когда пользователь входит в систему, это значение проверяется в этом столбце (0 = не удалено, 1 = удалено).
Все работает отлично на моей локальной машине. У меня не было ошибок, код прошел нормально. Мне удалось войти в систему с любым пользователем. Затем я развернулся на нашем тестовом сервере и добавил столбец «Удалено» в таблицу на тестовом SQL-сервере, используя скрипт.
Когда я пошел, чтобы войти в систему, с любым пользователем я не смог. Я продолжал получать «Ошибка входа в систему. Повторите ввод учетных данных и повторите попытку», даже несмотря на то, что мои учетные данные были правильными.
Я удалил файлы на сервере и развернул их снова. То же самое.
Я попятился все мои изменения и развернут снова и был в состоянии войти в Итак, я начал добавлять вещи кусок в то время:.
- Я запускал скрипт, чтобы добавить Deleted колонки бит типа данных и установить , чтобы не было нуля на нашем тестовом SQL-сервере
- Протестированный вход в систему и был удален
- Добавлено public bool Deleted {get; набор;} на мой BL Entity и развернут тест
Пытался войти в систему и не удалось
Удалены Удаленные BOOL и повторно развернуты
Умел войти
Я не понимаю, почему это добавление вызывает проблемы. Столбцы «Удаленные» используются в других таблицах приложения и не вызвали никаких проблем. И поскольку он работает нормально, когда я запускаю его локально, мне сложно определить, в чем проблема.
Вот мой BL Entity:
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
namespace BlahBlah.BusinessLogic.Entities
{
public class User : IdentityUser
{
public User() : base() { }
public User(string username) : base(username) { }
public Guid CompanyId { get; set; }
public Company Company { get; set; }
public bool PrimaryAccount { get; set; }
public Guid DefaultCompanyId { get; set; }
public ICollection<Transaction> Transactions { get; set; }
// public bool Deleted { get; set; }
}
}
Вот часть моего кода user.js:
...
$http(call)
.success(function (data) {
userData.isAuthenticated = true;
userData.username = data.userName;
userData.role = data.role;
userData.bearerToken = data.access_token;
userData.expirationDate = new Date(data['.expires']);
setHttpAuthHeader();
if (typeof successCallback === 'function') {
successCallback();
}
})
.error(function (data) {
if (typeof errorCallback === 'function') {
if (data.error_description) {
errorCallback(data.error_description);
}
else {
errorCallback('Unable to contact server; please, try again later.');
}
}
});
};
...
Вот часть моего кода login.js:
...
function login(common, $location, config) {
var getLogFn = common.logger.getLogFn;
var log = getLogFn(controllerId);
var vm = this;
vm.title = 'Login';
vm.credentials = {
username: '',
password: ''
};
vm.hideError = true;
vm.errorMessage = 'xx.';
vm.login = function login() {
vm.hideError = true;
common.$broadcast(config.events.spinnerToggle, { show: true });
common.user.authenticate(vm.credentials.username, vm.credentials.password, onSuccessfullLogin, onFailedLogin);
};
...
function onFailedLogin(error) {
common.$broadcast(config.events.spinnerToggle, { show: false });
console.log('error ' + error);
vm.hideError = false;
}
...
Любые идеи относительно того, что происходит или как я могу узнать, что происходит? Спасибо за ваше время!
ОБНОВЛЕНИЕ Я не должен был слишком волноваться. После выполнения некоторых тестов в приложении я решил проверить отчеты. До этого все прекрасно работало. Когда я просмотрел отчет, я получил следующую ошибку:
The model backing the 'BabDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database
В отчетах используется SSRS. Если я запустил скрипт для создания столбца И обновил таблицу _Migrations, я не понимаю, почему я получаю эту ошибку. Трассировка стека указывает на последнюю строку. Я читал предложения, но там, где мне нужно добавить код в метод OnModelCreating, но я не уверен, что это путь. Были другие развертывания, сделанные другими до меня, поэтому я чего-то не хватает.
public class AbaDbContext : IdentityDbContext<User>, IDbContext
{
public const int UnknownCTId = 1;
private IEncryptionService _encryptionService;
private static Dictionary<Guid, string> _cipherCache = new Dictionary<Guid,string>();
public BabDbContext()
: base("BabDbContext")
{
((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += new ObjectMaterializedEventHandler(ObjectMaterialized);
ЧТО СДЕЛАЛИ ЭТО! Я использовал эту команду для генерации скрипта, но я только захватил часть, которая добавила столбец «Удалено». Я восстановил резервную копию базы данных и на этот раз взял весь сгенерированный скрипт, и это сработало. БОЛЬШОЕ СПАСИБО! – rsford31
Рад, что это сработало. Большинство людей не понимают, что таблица миграции фактически содержит всю модель EDMX, и если она не соответствует тому, что EF внутренне, она снова запускает миграцию. – DavidG
Я не должен был волноваться. Я обновил свой первоначальный вопрос. Я добавил это в файл gobal.asax.cs в проекте Reportviewer: 'Database.SetInitializer (null);'. Я не понимаю, почему я должен был это делать, когда это не нужно делать предыдущим разработчикам, вносящим изменения? –
rsford31