2009-02-12 33 views
29

Có ai biết nếu nó có thể cho biết nếu một tài sản cụ thể trên một đối tượng là bẩn (tức là tài sản khác với tài sản được lưu trữ trên DB) bằng cách sử dụng NHibernate?Tôi có thể biết một tài sản có bị bẩn bằng cách sử dụng nhibernate không?

Nền tảng cho câu hỏi này là tôi sẽ có một đối tượng có số lượng lớn (tương đối) các thuộc tính trên đó. Tôi cần để có thể vượt qua một tham số (chuỗi) đến một hàm sẽ xác định xem thuộc tính cụ thể đó có thay đổi trong suốt thời gian tồn tại của trang hay không.

Nếu tôi cần tôi có thể tạo bản sao của đối tượng và sử dụng sự phản chiếu ở cuối vòng đời của trang để kiểm tra giá trị, nhưng tôi không muốn làm điều này. Nó sẽ là tuyệt vời nếu NHibernate chỉ đơn giản có thể cho tôi biết nếu một tài sản là bẩn.

Cảm ơn

Trả lời

23
+3

Các bài không đúng cách đánh giá cho nhà nước bẩn, thay đổi: Int32 [] dirtyProps = oldState.Select ((o, i) => Object.equals (oldState [i], currentState [i])? -1: i) .Có (x => x> = 0) .ToArray(). Trong thực tế kiểm tra bẩn này có sẵn từ persister thông qua IEntityPersister.FindDirty. Ví dụ: http://stackoverflow.com/questions/1690755/in-nhibernate-my-check-if-entity-is-dirty-fails – Llyle

1

Đó không phải là hiện có sẵn thông qua API nHibernate (hoặc Hibnernate, AFAIK). Bạn có thể viết một cái gì đó như thế này cho mình bằng cách lưu trữ trạng thái của các đối tượng khi chúng được nạp vào phiên, sau đó so sánh chúng.

LƯU Ý: Tôi chưa từng thấy điều này cho bản thân mình, nhưng, nếu bạn chưa đăng nhập vào lựa chọn ORM, bạn nên xem xét cận âm. Rất nhiều trạng thái bẩn được theo dõi trong chính các đối tượng và bạn có thể xác định xem một thuộc tính cụ thể có bị bẩn hay không.

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