2016-08-20 23 views
5

Tôi đang sử dụng EF 6 trong dự án của mình, khi tôi muốn xóa một hàng khỏi bảng nó trow ngoại lệ vì hàng đó được tham chiếu trong bảng khác. Tôi muốn biết bảng nào ngăn tôi xóa bằng mã C# và EF.Làm cách nào để biết bảng nào ngăn tôi xóa một hàng bằng Entity Framework 6?

enter image description here

Chúng tôi có một bản ghi trong bảng A và hàng đó được tham chiếu trong bảng C không có trong bảng B. Có thể với EF để biết rằng bảng C ngăn chặn tôi từ xóa hàng đó?

Tôi cũng đang sử dụng SQL-Server 2012.

+3

Ba suy nghĩ: phân tích ngoại lệ; đọc thực thể trước và kiểm tra các thực thể con; switch on cascade delete –

+0

Máy chủ cơ sở dữ liệu (không phải EF) ngăn chặn việc xóa bảng cha nếu có một mối quan hệ được tạo ra trong máy chủ. chạy tập lệnh đó để biết mối quan hệ: http://stackoverflow.com/a/8095137/3142139. –

Trả lời

0

Nếu bạn đang cố gắng để tự động sắp xếp này trong thời gian chạy để hiển thị cho người sử dụng hoặc xác định trước nỗ lực xóa và bạn không chắc chắn về cuộc xung đột có thể bạn có thể sử dụng các bảng sys và một số sql động để sắp xếp điều này.

  1. Sử dụng sys.objects để tìm tên bảng của bạn và nhận object_id.
  2. Sử dụng sys.foreign_keys để tìm các bảng tham chiếu đến bảng của bạn.
  3. Sử dụng sys. foreign_key_columns để lấy số cột chính xác được tham chiếu.
  4. Sử dụng sys.columns để nhận tên cột thích hợp.
  5. Tạo SQL động để tìm kiếm tên bảng và cột và tìm các hàng vi phạm bằng cách sử dụng các giá trị từ hàng nguồn không thể xóa được.
  6. Liệt kê các bảng được trả về nhìn lên trong sys.objects. Tùy chọn liệt kê số hàng.
  7. tùy ý sử dụng SQL động để xây dựng báo cáo khác (ví dụ như xóa xúc phạm kỷ lục - điều này có thể cần phải được đệ quy - chăm sóc với điều này - bạn có thể mất rất nhiều dữ liệu!)
Các vấn đề liên quan