Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在表上放置约束后,如何删除asp.net标识用户?_C#_Linq_Constraints_Asp.net Identity - Fatal编程技术网

C# 在表上放置约束后,如何删除asp.net标识用户?

C# 在表上放置约束后,如何删除asp.net标识用户?,c#,linq,constraints,asp.net-identity,C#,Linq,Constraints,Asp.net Identity,在此ActionResult中,我正在从ASP.NET用户表中删除用户 public ActionResult Delete(string UserName) { var thisUser = _context.Users.FirstOrDefault(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)); _context.Users.Remove(thisUser

在此
ActionResult
中,我正在从ASP.NET用户表中删除用户

public ActionResult Delete(string UserName)
{
    var thisUser =
    _context.Users.FirstOrDefault(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase));
    _context.Users.Remove(thisUser);
    _context.SaveChanges();
    return RedirectToAction("Index");
}
但是,当我尝试删除用户时,会出现以下错误:

DELETE语句与引用约束“FK_dbo.UserLogs_dbo.AspNetUsers_Customer_Id”冲突。冲突发生在数据库“MYDATABASE”、表“dbo.UserLogs”和列“Customer\u Id”中。 声明已终止。


我知道将约束放在那里是为了防止数据损坏,这很好,但是我如何删除约束,使其足以删除用户,然后在删除用户后再将其添加回?

您可以暂时禁用表的所有约束以避免错误,然后按如下所示重新启用它:

ALTER TABLE <table_name> NOCHECK CONSTRAINT ALL
--Run query here
ALTER TABLE <table_name> CHECK CONSTRAINT ALL
ALTER TABLE NOCHECK CONSTRAINT ALL
--在此处运行查询
ALTER TABLE CHECK CONSTRAINT ALL

简而言之,你有麻烦了。但有办法解决它

您不想仅仅为了删除用户而弄乱外键,但约束的存在是有充分理由的。您想删除用户记录

让我们看看这个场景——用户注册,在您的站点上做一些事情,生成一些日志记录,用户id引用回用户。然后用户决定他不再喜欢您的系统并删除他的个人资料。如果删除FK约束,然后从Users表中删除一条记录,然后恢复该约束,则将在Logs表中获得包含UserId的记录。但是在接下来的2个月里,你想查找那个用户——你会发现ID并没有指向任何地方。这使得日志非常无用

因此,您的选择是:

  • 软删除-不实际删除用户记录,但设置一个标志,表明用户记录已被删除,并确保访问用户表的所有系统都知道该标志,并忽略软删除记录
  • 将用户信息非规范化为日志。不要对来自用户的日志设置FK约束,但要在日志中保留userId、username,可能还有email。这样,您仍然可以知道用户做了什么,并且可以跟踪已删除用户的操作。当你试图删除一个用户的时候,你不需要和FK打交道。这就是我在我的系统中所做的,但我并没有登录到DB,而是登录到其他不可能从FKs到SQL的存储

我将如何删除限制条件,使其足以删除用户,然后在删除用户后再将其添加回去
如果您不需要它,那么为什么首先要使用它?从表中删除外键约束。这是有原因的
在从用户中删除条目之前,需要从其他表中删除该条目
。我知道你需要它作为日志?那么为什么您需要外键约束?@TheUknown using code first只要我想引用另一个表中的
应用程序用户
,就会自动创建约束。但我不想删除用户日志或用户订单。这对风险管理和责任制非常不利使用代码首先编写代码并定义约束-如何自动创建约束?首先在DB中是这样的。您可以获取行,然后从DB中删除导致冲突的行,然后从用户中删除并再次添加,或者只是删除约束。我猜你已经知道了。“你真正的问题是什么?”他们知道这是我的问题,说真的。我知道我可以删除订单和日志,但我不想这样做。我使用的是代码优先,但是对于MVC来说还是相当陌生的,我几乎没有注意到迁移,在迁移过程中,我可以删除约束并更新对数据库的更改。我想我可以删除这些限制,这会减少麻烦,当我想简单地删除用户时,我可以保留日志和订单。这在SQL中可以工作,但是我使用的是asp.net MVC5 c#和linq@Skullomania然而,下面有一个SQL数据库来存储数据。