C# 数据库冲突删除

C# 数据库冲突删除,c#,sql,C#,Sql,我不能删除我的用户。当我按delete键时,出现以下错误: “FK_dbo.Environment_dbo.JobExperiences_JobExperienceId”。冲突 发生在数据库“DiplTestDb”表“dbo.Environments”列中 “工作经验ID” 我假设我得到了错误,因为环境和工作经验是相关的,因此必须同时删除。是否有人知道这是否可以通过fluentAPI完成,或者是否有其他解决方案。您有一个完整性约束问题,这意味着用户id已在另一个表中使用,并且该表上有外键约束 获

我不能删除我的用户。当我按delete键时,出现以下错误:

“FK_dbo.Environment_dbo.JobExperiences_JobExperienceId”。冲突 发生在数据库“DiplTestDb”表“dbo.Environments”列中 “工作经验ID”


我假设我得到了错误,因为环境和工作经验是相关的,因此必须同时删除。是否有人知道这是否可以通过fluentAPI完成,或者是否有其他解决方案。

您有一个完整性约束问题,这意味着用户id已在另一个表中使用,并且该表上有外键约束

获得异常的具体原因是,正如您正确假设的那样,用户和Environment.experienceId(从现在开始体验)之间存在外键链接

要根据请求执行硬删除,需要删除与用户有外键关系的体验行

假设您希望删除用户:id 1,userEmail,test@useremail.com

伪代码:

DbContext context = new DbContext();
User forDeletion = context.Users.FirstOrDefault(x => x.id == 1);
context.Environments.Delete(x => x.User_Id == forDeletion.id);
context.SaveChanges();
但是,我郑重建议你不要这样做。 相反,您应该在表中添加一个名为“deleted_at”(可能是deleted_by)的列作为null。 仅在删除时返回行。\u at为空


这对于记录删除数据的时间和删除人更为有利。

我认为级联删除是您正在寻找的。您需要删除包含与主记录相关的外键的记录,然后才能删除主记录。您可以通过一个初步的delete语句,或者通过在数据库中设置级联删除规则来实现这一点。在您的情况下,从错误中可以看出,似乎需要从环境表中删除一条(或多条)记录,其中JobExperienceID与要删除的JobExperiences中记录的JobExperienceID匹配。从审核和安全角度来看,这是一种不好的做法though@LeoRams你想详细说明一下吗?当然,这取决于您是否审核了所发生的事情,和/或删除这些部门记录实际上是否是流程中必要或可取的部分。事实上,业务规则可能应该是,当存在与其相关的子记录时,不能删除该记录。我们不知道期望的行为实际上是什么,我们得到的只是一条错误消息,请求提供技术解决方案。如果这看起来像一个微不足道的问题,我很抱歉,但我总共只与.net合作了10周。。。但是你会怎么做呢?如前所述,我假设它可以通过FluentAPI完成,但我不太习惯使用FluentAPI。它描述了问题,但实际上没有提供解决方案……这不是一个.net问题,而是一个数据库模式问题。您可以级联删除,也就是说,无论何时删除用户,都会删除所有链接到用户的信息。从审计的角度来看,这是一种不好的做法。另一个选项是在用户表上放置一个活动指示器,因此,您只需将用户标记为处于活动状态即可。谢谢您的回答,我将尝试使用它。如果我能成功,我会接受你的回答。可悲的是,我需要用不好的方式来做。我的时间非常有限。不过还是谢谢你告诉我。@CodeProg,我不知道你受到了什么限制,但我很乐意帮助你实现这两种解决方案。如果愿意,您可以用PM向我提供详细信息。我甚至不知道这是可能的,但我想我会接受您的报价。@MortenBork您刚刚在一个可搜索的公共网站上发布了您的个人电子邮件地址。我敢打赌,不久垃圾邮件蜘蛛就会找到它,并且一天又一天地给你发垃圾邮件。如果是我,我会删除评论a.s.a.p。。。。无论如何,SO是一个公共的问题和答案库,每个人都可以从中受益,它不是一个招揽或提供私人咨询工作的地方,这就是为什么没有PM功能的原因。您可以使用聊天功能进行IM对话,但它仍然是公共的。如果OP问了一个公开的问题,他们会得到一个公开的答案。我之所以在那里使用我的电子邮件,是因为,这是一封一次性的电子邮件,收到的垃圾邮件如此之多,你不会相信。但我经常会去看看。但是谢谢你的关心。我不是有意征求任何工作。我只是想免费帮助他。他可能无法公开发布足够的信息来明确自己的要求。