2009-05-12 26 views
7

Tôi nghĩ đây là một câu hỏi dễ, nhưng googling của tôi yếu về điều này.NHibernate: Ý nghĩa của các kẻ chặn trả về giá trị

tôi đã có vấn đề mô tả trong các liên kết dưới đây đối với một ID được tạo ra và tầng:

https://www.hibernate.org/hib_docs/nhibernate/html/example-parentchild.html (hướng về phía dưới)

tôi cố định nó sử dụng phương pháp đề nghị của họ về một Interceptor. Mọi thứ dường như đang hoạt động, vì vậy tôi hạnh phúc.

Điều đó nói rằng, tôi không có ý tưởng những gì ý nghĩa của giá trị trả về là từ các phương pháp như:

public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types) 
    { 
     if (entity is Persistent) ((Persistent)entity).OnLoad(); 
     return false; 
    } 

    public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types) 
    { 
     if (entity is Persistent) ((Persistent)entity).OnSave(); 
     return false; 
    } 

Trong cả hai trường hợp sai được trả về.

Khi tôi google về NHibernate Interceptors, tôi thấy rất nhiều ví dụ về cách viết một. Một số thay vào đó trở lại đúng (http://www.lostechies.com/blogs/rhouston/archive/2008/03/27/creating-a-timestamp-interceptor-in-nhibernate.aspx). Tôi không biết sự khác biệt ở đây là gì. Mã của tôi đang hoạt động, nhưng Interceptor có vẻ hữu ích đối với tôi nên tôi muốn hiểu rõ hơn.

+1

btw, thiết bị chặn được ngừng và thay thế bằng hệ thống sự kiện. Thật không may, hệ thống sự kiện thậm chí còn ít tài liệu. Nhưng bạn vẫn nên tìm một số tài liệu hữu ích. –

Trả lời

5

Tôi tin rằng giá trị trả về sẽ cho biết nếu thông số trạng thái đã được thay đổi trong phương pháp chặn. Bạn đang đúng - đó là một trong những khó khăn để google tại thời điểm này - trang web NHibernate di chuyển gần đây và google dường như không tìm thấy nhiều thông tin hữu ích như nó được sử dụng để.

+0

Vì vậy, nó là công bằng để nói rằng bạn trở lại đúng nếu bạn thay đổi nhà nước, và sai nếu bạn không? –

0

Huey,

đã đọc bài này, tôi không phải là một lập trình viên .net, nhưng bài này là rất hữu ích:

http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11/1nr4enxv3dpeq/14#

Chương 11. đánh chặn và các sự kiện Nó là thường hữu ích cho ứng dụng để phản ứng với các sự kiện nhất định xảy ra bên trong NHibernate. Điều này cho phép triển khai một số loại chức năng nhất định của và mở rộng chức năng NHibernate.

11.1. Interceptors Giao diện IInterceptor cung cấp các cuộc gọi lại từ phiên đến ứng dụng cho phép ứng dụng kiểm tra và/hoặc thao tác các thuộc tính của đối tượng liên tục trước khi được lưu, cập nhật, bị xóa hoặc tải. Có thể sử dụng để thực hiện việc này là theo dõi kiểm tra thông tin . Ví dụ: Trình theo dõi II sau đây tự động đặt createTimestamp khi một Có thể tạo và cập nhật thuộc tính lastUpdateTimestamp khi số Có thể cập nhật được IAuditable.

Hy vọng nó sẽ làm bạn thêm một chút nữa.

+1

Tôi đã thực sự đọc điều này trước nhưng có lẽ tôi cần phải đọc nhiều hơn giữa các dòng. Trong ví dụ họ cung cấp, có vẻ như nó trả về true nếu nó sửa đổi thực thể và false nếu nó không. Có lẽ đó là tất cả để có nó.Tôi đoán tôi nên đã nhìn gần hơn vào mã và không mong đợi một 'giá trị trả về có nghĩa là (trống)' hướng dẫn. – anonymous

+0

- đây là một bài cũ nhưng chỉ trong trường hợp ai đó thấy nó hữu ích - tôi đã phải sửa đổi giá trị trả về trong interceptor để trả về True nếu IsSaved là false, sau đó sẽ hướng dẫn NH lưu ví dụ mới (với chèn). – TheMar

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