У меня проблема с сохранением изменений в базе данных с сущностью. Я использую три таблицы; AspNetUsers, tblCountry и tblCountry_AspNetUsers.Entity-framework не сохраняет изменения в базе данных
tblCountry_AspNetUsers состоит из двух столбцов; UserId и CountryId, который создает отношения «один ко многим» между tblCountry и AspNetUsers.
В настоящее время я хочу изменить страну определенного пользователя, но инфраструктура сущности не позволяет мне получить доступ к базе данных tblCountry_AspNetUsers и вместо этого создает ICollection AspNetUsers на tblCountry. Я могу назначить Id на AspNetUser напрямую, но я не хочу начинать добавлять/удалять столбцы из таблиц идентификации только с тех пор, как я сначала использую базу данных, и я слышал, что это может привести к проблемам.
В любом случае, я могу удалить из ICollection и сохранить эти изменения в базе данных, но когда я пытаюсь добавить одного и того же пользователя в другую страну, он не сохраняется в базе данных правильно, но я могу найти пользователь в контексте объекта при отладке.
Я попытался подключить и изменить сущность-элемент как добавленным, так и измененным, но когда я пытаюсь это сделать, он вырывается из метода и не обновляет базу данных. (В основном это замерзает, когда я пытаюсь прикрепить)
Мой код для редактирования пользователя выглядит следующим образом:
(Обратите внимание, что UserManager обрабатывает usermodel идентичность, ApplicationUser ,, который не является такой же, как AspNetUsers в этом аспекте)
(Кроме того, tblCountry.AspNetUsers относится к ICollection пользователей, назначенного конкретной стране)
...
var aspuser = new AspNetUsers();
using (DbContext dc = new DbContext())
{
aspuser = dc.AspNetUsers.First(x => x.Id == userid);
var user = await UserManager.FindByIdAsync(userid);
user.Email = updatedUser.UserName;
user.UserName = updatedUser.Email;
var result = await UserManager.UpdateAsync(user);
aspuser.tblCountry.AspNetUsers.Remove(aspuser);
await dc.SaveChangesAsync();
}
using (DbContext dc = new DbContext())
{
var c = _country.GetById(newcountryid);
c.AspNetUsers.Add(aspuser);
await dc.SaveChangesAsync();
}
return Users(userid);
}
было бы очень легко, если Wa s таблица, к которой я мог бы получить доступ напрямую, но с подобным ICollection я смущен тем, что я должен сделать, чтобы заставить его работать, и я ценю любой вклад!
Приветствия
Я просто попробовал разделить их, чтобы увидеть, какая разница в нем, но даже если они находятся в том же блоке, что и функция удаления, по какой-то причине она не сохраняет новую коллекцию AspNetUsers в базе данных. –
Дождитесь секунды, если у вас есть таблица tblCountry_AspNetUsers, тогда это много для многих отношений, а не для многих, и Entity должен также создать ICollection of Countries в классе AspNetUser. У вас есть эта собственность? – Aleksa
Нет, поскольку я использую UserId как первичный ключ в tblCountry_AspNetUsers. Что я имею в классе AspNetUser, хотя это; общественный виртуальный tblCountry tblCountry {get; задавать; } –