Thông thường tôi phải chèn một số dữ liệu trong một DB và nó không thể được chèn bởi vì bảng có các ràng buộc ngăn cản tôi làm điều đó. Với ứng dụng tôi đang phát triển, một số quy tắc kinh doanh (như "không có hai người có cùng loại id và số" hoặc "sản phẩm XXXX đã được đăng ký") được thực thi bằng các phím UNIQUE hoặc composite và các cơ chế khác. Mặc dù tôi biết rằng DBMS ném một thông báo lỗi (như ORA-6346 hoặc) Tôi không biết làm thế nào để bắt những lỗi trong .net 4.0 và dịch chúng thành một lỗi có thể có ý nghĩa cho lớp kinh doanh.Cách bắt lỗi DB và dịch chúng thành thông tin có ý nghĩa cho lớp doanh nghiệp?
Ví dụ: Tôi đã nhìn thấy cơ chế chèn yêu cầu DB nếu sổ đăng ký đã tồn tại và sau đó nó tiến hành chèn dữ liệu nếu không phải như vậy. Tôi muốn làm điều này chỉ bằng cách sử dụng một truy vấn và bắt lỗi vi phạm cơ sở dữ liệu ràng buộc bởi vì cách đầu tiên dường như với tôi là rất kém hiệu quả (DB có thể cảnh báo bạn về trùng lặp với một lỗi).
Tôi có thể triển khai một cái gì đó như thế?
Lưu ý: Tôi nghĩ rằng có thể bắt ngoại lệ từ cơ sở dữ liệu và sử dụng mã ORA-xxxx của nó để cố gắng tìm ra những gì đã xảy ra. Tôi không nhớ chính xác nếu thông báo lỗi cho thấy ràng buộc nào (tên của ...) đã bị hỏng, nhưng mã lớp nghiệp vụ có thể chứa các hằng số với các tên ràng buộc và, từ chúng, biết điều gì đã xảy ra.
Điều này nghe có vẻ giống như gọi phương thức với try/catch thay vì xác thực đối số trước khi gọi – driushkin
nếu bạn không muốn kiểm tra xem đăng ký đã tồn tại chưa, trước tiên bạn có thể thử tạo và sau đó nếu ngoại lệ được ném từ db, bạn có thể kiểm tra xem RegisterExists() có trả về true hay không, để chắc chắn rằng đó là nguồn gốc của vấn đề, và không phải là db không làm việc gì cả. Nếu đã tồn tại trường hợp là khá hiếm, bạn sẽ không nhận được rằng hiệu suất hit thường xuyên như vậy. –