Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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
Sql 存在外键时删除-是否有方法获取违反外键(EF)的键的id_Sql_Sql Server_Sql Server 2008_Entity Framework 4_Foreign Keys - Fatal编程技术网

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异常
并检查
内部异常
,您可以从中获得更多信息(如果可用)。