【发布时间】:2020-02-02 18:20:10
【问题描述】:
我是 ASP.NET MVC 和 C# 的新手,也许你可以帮助我。
我已经连接到我的数据库并且我已经有一个SEC_Users 表的控制器。我的问题是我们的数据库有很多带有很多外键的表。所以我们的用户连接到很多其他表(项目只是我学习的一种解决方法)。
现在我的问题是我无法删除用户,因为他连接到其他表,我需要先删除这些条目。我开始一个接一个地删除表。但现在我有点卡住了。
用户在表SEC_LoginToken 中有一些条目,我需要将其删除。这可行,但我还需要删除表SEC_RefreshToken 中的条目,该条目通过token 列与SEC_LoginToken 连接。而且我不知道如何删除SEC_RefreshToken 表中的这些条目。
对不起我的英语,希望你能理解我的问题。
因此,为了删除其他表中的所有条目,我从用户那里获取 id 并查看是否有具有该用户 ID 的条目,如果有,我将其删除。我试图从SEC_LoginToken 中取出token 列,我想在其中删除行并将其保存到列表中。然后我想说,对于列表中的每个条目,应该删除SEC_RefreshToken 中的列token 相同的行。但它不起作用。有没有更好的方法?还是我做错了什么?
您在这里看到我的控制器的 DELETE(功能?):
[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())
提前非常感谢!
【问题讨论】:
-
用
First()代替Single()? -
我会说一起删除
Single(),因为您想遍历用户的每个令牌,而不仅仅是一个。 -
我认为您应该首先从最后一个表中删除,或者不产生错误的表然后是后续表。此外,在您的 foreach 循环之后,您可能需要在继续进行另一个循环之前保存更改。
标签: c# visual-studio entity-framework model-view-controller foreign-keys