2010-05-28 37 views
10

Các proxy nhibernate có thực hiện công việc thông minh nào để thực hiện theo dõi thay đổi hiệu quả không? Hay nó chỉ hỗ trợ những gì Entity Framework gọi theo dõi thay đổi dựa trên ảnh chụp nhanh?NHibernate thực hiện theo dõi thay đổi như thế nào?

+0

Bạn đang nói về ghi nhật ký kiểm tra, nơi thay đổi được ghi lại hoặc quản lý thay đổi đầy đủ với khả năng hoàn nguyên về phiên bản trước đó của thực thể? – DanK

+0

Nếu thực thể có nhiều thuộc tính ORM nên phát hành câu lệnh cập nhật cho cơ sở dữ liệu chỉ với các thuộc tính đã thay đổi. Trong LINQ TO SQL, nó biết rằng các thuộc tính đã thay đổi hoặc không thông qua giao diện INotifyPorpertyChanging/Changed (mặc dù nó không phải là yêu cầu, trong trường hợp nó rơi trở lại theo dõi thay đổi dựa trên ảnh chụp nhanh, nghĩa là nó so sánh mọi thuộc tính để tìm ra). – Alice

Trả lời

12

Nó dựa trên ảnh chụp nhanh.

Khi tải một thực thể, trạng thái của nó được lưu trữ trong phiên làm đối tượng [].

Khi xả, trạng thái hiện tại được chuyển đổi thành đối tượng [] và so sánh với trạng thái ban đầu để xác định thuộc tính nào bị bẩn.

Điều này hiệu quả hơn vì nhiều lý do. Một trong số đó là bạn không cần cần proxy để theo dõi thay đổi. Khác là, nếu bạn đặt một thuộc tính cho một giá trị khác và sau đó hoàn nguyên nó, thực thể sẽ được coi là không bẩn, do đó tránh được một cuộc gọi DB không cần thiết.

9

NHibernate và EntityFramework theo dõi các thay đổi theo những cách rất khác nhau. Entity Framework theo dõi các thay đổi trong thực thể. NHibernate theo dõi các thay đổi trong phiên.

Thay đổi theo dõi trong thực thể yêu cầu nhiều bộ nhớ hơn (vì bạn đang lưu trữ các giá trị trước cũng như các giá trị sau). Các thực thể có thể giữ lại sự theo dõi thay đổi ngay cả sau khi ngắt kết nối khỏi ObjectContext.

Thay đổi theo dõi trong phiên tổng thể hiệu quả hơn, nhưng nếu bạn ngắt kết nối một thực thể khỏi phiên, bạn sẽ mất theo dõi thay đổi.

+0

Tuyên bố này có đúng không? Theo như tôi biết, EF sử dụng một bộ theo dõi thay đổi được gọi là để theo dõi các thay đổi thực thể. Không có cơ sở hạ tầng theo dõi thay đổi nào được chứa trong thực thể. – Andreas

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