如何知道哪个表阻止我用Entity Framework 6删除一行?
问题描述:
我正在使用EF 6在我的项目中,当我想从表中删除一行时,它会抛出异常,因为该行在另一个表中被引用。我想知道哪些表阻止我用c#代码和EF删除。如何知道哪个表阻止我用Entity Framework 6删除一行?
我们在表A中的记录和行表C中的引用不表B中是否有可能与EF知道将表C防止我删除该行?
我还使用SQL-Server 2012的
答
如果你试图动态排序,这在运行时显示用户或删除尝试之前确定并不能确定可能发生的冲突,你可以使用sys表和一些动态的SQL来排序。
- 使用
sys.objects
找到您的表名并获取object_id。 - 使用
sys.foreign_keys
查找引用您的表的表。 - 使用sys。
foreign_key_columns
以获取引用的确切列号。 - 使用
sys.columns
可以获得适当的列名称。 - 构建动态SQL以搜索表名和列名,并使用无法删除的源行中的值查找违规行。
- 列出返回在
sys.objects
中查找的表格。可选列出行数。 - 可以选择使用动态SQL来构建其他语句(如删除违规记录 - 这可能需要递归 - 照顾这个 - 你可能会失去大量的数据!)
三个想法:解析例外;先阅读实体并检查子实体;切换级联删除 –
如果在服务器中创建了关系,数据库服务器(而非EF)将阻止删除父表。运行该脚本以了解关系:http://stackoverflow.com/a/8095137/3142139。 –