2011-12-11 26 views
8

Logic kinh doanh bên trong một quá trình được:Nhibernate - item được ParentID của nó được cập nhật để null thay vì xóa chúng

  • bắt đầu giao dịch
  • thêm một mục vào một bộ sưu tập
  • thực hiện một find ("somethingA ")
  • xóa mục đó tùy thuộc vào bước trước đó.
  • cam kết giao dịch

Im sử dụng thác hoàn toàn xóa-trẻ mồ côi, và nghịch đảo = true, cả trong lớp học của bố mẹ tôi. Khi xóa mục khỏi bộ sưu tập, tôi đặt .parentObj = null và xóa mục khỏi bộ sưu tập.

Khi sử dụng TemplateFlushMode.Auto, tôi cấu hình cơ sở dữ liệu và sau đây được thực hiện:

  • INSERT mục
  • Chọn liên quan tosomethingA
  • CẬP NHẬT ParentID (FK để công ty mẹ) của Item để NULL

(mục chèn được thực hiện vì find() được thực hiện để đảm bảo tính nhất quán của dữ liệu trong cơ sở dữ liệu). Việc lựa chọn được thực hiện, và sau đó tôi mong đợi một DELETE được thực hiện ... nhưng một bản cập nhật để parentID = null được thực hiện.

Khi thực hiện một Session.Flush() ngay trước khi Find(), sau đây sẽ xảy ra:

  • mục INSERT
  • Chọn liên quan tosomethingA
  • DELETE mục

Khi sử dụng TemplateFlushMode.Commit, những thay đổi được thực hiện ở cuối giao dịch và mục không bao giờ được chèn vào:

  • Chọn liên quan tosomethingA

Ứng dụng Tôi đang làm việc với đang sử dụng TemplateFlushMode.Auto, vì vậy tôi tự hỏi, là có một lời giải thích lý do tại sao các tầng không hoạt động nếu một lựa chọn được thực hiện ở giữa một mục được thêm vào và sau đó loại bỏ trong cùng một giao dịch?

Tôi biết câu trả lời đầu tiên xuất hiện là "không thêm mục vào bộ sưu tập, nếu mục đó sẽ bị xóa sau đó". Nhưng tôi không thay đổi logic kinh doanh.

Có ai biết tại sao cập nhật đang được thực hiện thay vì delete khi sử dụng AUTO? (khi sử dụng Commit nó không chèn đối tượng)

+0

Hey Adrián, câu hỏi tốt, tôi có câu hỏi tương tự như bạn thực sự. – san983

+1

bạn có thể hiển thị ánh xạ không? – giammin

+0

Tôi có thể hỏi bạn đang cố gắng làm gì với điều này? nó có thể là một giải pháp khác. – ivowiblo

Trả lời

0

Bạn đang sử dụng một cách hai đến nhiều ràng buộc? Bạn đã đánh dấu not-null="true" trên khóa ngoại trong bảng details chưa? Bạn có thể vui lòng đăng tệp XML ánh xạ của mình để hiểu rõ hơn không?

Tôi biết rằng tôi chưa trả lời câu hỏi của bạn, nhưng tôi không có đủ danh tiếng để đăng nhận xét thay thế.

1

Tôi đoán bạn nên sử dụng cascade="delete" tùy chọn trong tập tin bản đồ của bạn để thác trên delete

Các vấn đề liên quan