Я новичок в ASP.NET MVC и вообще в C #, может быть, вы можете мне помочь.
У меня есть соединение с моей базой данных, и у меня уже есть контроллер таблицы SEC_Users
. Моя проблема в том, что в нашей базе данных много таблиц с большим количеством внешних ключей. Таким образом, наши пользователи подключены ко многим другим таблицам (для меня это всего лишь обходной путь проекта).
Теперь у меня проблема, что я не могу удалить пользователя, потому что он подключен к другим таблицам иМне нужно сначала удалить эти записи. Я начал удалять одну за другой таблицу. Но сейчас я застрял.
У пользователя есть несколько записей в таблице SEC_LoginToken
, которые мне нужно удалить. Это работает, но мне также нужно удалить запись в таблице SEC_RefreshToken
, которая связана с SEC_LoginToken
через столбец token
. И я не знаю, как я могу удалить эти записи в таблице SEC_RefreshToken
.
Извините за мой английский, надеюсь, вы понимаете мою проблему.
Так что для удаления всех записей вВ других таблицах я беру идентификатор у пользователя и проверяю, есть ли запись с этим идентификатором пользователя, и если да, я ее удаляю. Я попытался взять столбец token
из SEC_LoginToken
, где я хочу удалить строки и сохранить их в списке. И затем я хочу сказать, что для каждой записи в списке следует удалить строку в SEC_RefreshToken
, где столбец token
одинаков. Но это не работает. Может быть, есть лучший способ? Или что я делаю не так?
Здесь вы видите УДАЛИТЬ (функцию?) Моего контроллера:
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
// Löschen aller Einträge des Users in der DAT_UserDetail
foreach (var ec in db.DAT_UserDetail.Where(x => x.UserID == id))
db.DAT_UserDetail.Remove(ec);
// Löschen aller Einträge des Users in der SEC_ObjectAccessRight
foreach (var ec in db.SEC_ObjectAccessRight.Where(x => x.UserID == id))
db.SEC_ObjectAccessRight.Remove(ec);
// Löschen aller Einträge des Users in der SEC_UserGroupFunction_User
foreach (var ec in db.SEC_UserGroupFunction_User.Where(x => x.UserID == id))
db.SEC_UserGroupFunction_User.Remove(ec);
//-----------------------------------------------------------------------
List<string> token = new List<string>();
foreach (char ec in db.SEC_LoginToken.Where(x => x.UserID == id)
.Select(x => x.Token)
.Single())
token.Add(ec.ToString());
foreach (string row in token)
{
// db.SEC_RefreshToken.Remove(token);
db.SEC_RefreshToken.RemoveRange(db.SEC_RefreshToken.Where(x => x.Token == row));
db.SaveChanges();
}
//-----------------------------------------------------------------------
// Löschen aller Einträge des Users in der SEC_LoginToken
foreach (var ec in db.SEC_LoginToken.Where(x => x.UserID == id))
db.SEC_LoginToken.Remove(ec);
// Löschen des Users
SEC_User sEC_User = db.SEC_User.Find(id);
db.SEC_User.Remove(sEC_User);
db.SaveChanges();
return RedirectToAction("Index");
}
Я просто хочу нажать кнопку удаления без получения ошибки: последовательностьсодержит более одного элемента. Это происходит там, где я кодировал
foreach (char ec in db.SEC_LoginToken.Where(x => x.UserID == id).Select(x => x.Token).Single())
Заранее большое спасибо!