Sql 存在外键时删除-是否有方法获取违反外键(EF)的键的id
我正在使用实体框架。Sql 存在外键时删除-是否有方法获取违反外键(EF)的键的id,sql,sql-server,sql-server-2008,entity-framework-4,foreign-keys,Sql,Sql Server,Sql Server 2008,Entity Framework 4,Foreign Keys,我正在使用实体框架。 我有1:n的A表和B表。 假设我删除了A中的许多行,表A中的一个关键行在表B中有一行或多行 我得到以下文本的sqlException The DELETE statement conflicted with the REFERENCE constraint "FK_A_B". The conflict occurred in database "DCDCommunity", table "Template.Template", column 'Applicati
我有1:n的A表和B表。
假设我删除了A中的许多行,表A中的一个关键行在表B中有一行或多行 我得到以下文本的sqlException
The DELETE statement conflicted with the REFERENCE constraint "FK_A_B".
The conflict occurred in database "DCDCommunity", table "Template.Template",
column 'ApplicationTypeID'. The statement has been terminated.
是否有方法获取违反外键的密钥的id
重要编辑:
我知道我可以检查B是否有行。但这将容易产生持久性问题。
(假设在检查之后立即发出另一个插入请求。) 通过不检查并让数据库抛出异常,我让他处理持久性(特别是在多台机器上运行时)
现在-如果SQL异常中有更多数据,我只能依赖此机制。
您不能从A(主键表)中删除行,而B(外部表)中有相关记录。
。这违反了关系。因此,您需要先从B中删除它们,然后从A中删除它们。或者您可以在删除级联时执行。请如果您删除了多个A,如何阻止它们成为多个A,而这些A的删除违反了外键约束?您可以进行双向检查。(1). 如果B没有记录
-->删除A.
(2)。如果A有PK记录
-->插入到B中
可能我没有很好地解释我自己。我正在努力避免检查。检查由三个数据库组成的体系结构容易出现问题。i、 e.一致性和持久性。我想让数据库来处理它。我喜欢它抛出异常的事实,但我想知道是否可以从中获取更多数据。如果您在DELETE CASCADE上实现,
,数据库将为您处理DELETE
。对于INSERT
,您可以使用尝试{}catch(){}
块,然后获取异常类型
并对其执行操作。这有意义吗?谢谢,但这不是我要问的。我不想删除它。我不想删除它。我希望它抛出一个异常,而不是用我的代码搜索和解决它。目前它可以完成所有这些,我可以依赖它的机制,因为它比我自己编写更安全——因为它保证可以在任何db架构上工作。我只是想知道是否有一种方法可以从异常中获取更多数据,这样我就可以展示它了。DB异常超过特定值。这就是我不想自己去实现它所需要的。我不明白你的意思根据OP
,您需要找到主键id
,对吗?所以,当你试图删除PK ID时,它必须在你手中。对的有关更多详细信息,捕获CLR异常
并检查内部异常
,您可以从中获得更多信息(如果可用)。