2009-07-19 28 views

Trả lời

67

Chương 9 bao gồm tất cả những điều này tốt hơn tôi có thể:

http://nhibernate.info/doc/nh/en/index.html

Nhưng vách đá ghi chú:

Save() mất một đối tượng mới mà không có một định danh và gắn nó vào phiên. Đối tượng sẽ là INSERT 'd.

Update() lấy một đối tượng hiện có có số nhận dạng nhưng không có trong phiên và đính kèm nó vào phiên. Đối tượng sẽ là UPDATE 'd.

SaveOrUpdate() xem mã nhận diện và quyết định những gì cần thiết ở trên.

SaveOrUpdateCopy() đặc biệt trong đó nói rằng bạn có hai đối tượng có cùng số nhận dạng - một trong phiên và một đối tượng không có. Nếu bạn thử và update thì không có gì trong phiên, ngoại lệ được ném bình thường (bạn hiện đang cố đính kèm hai đối tượng đại diện cho cùng một đối tượng liên tục cho phiên). SaveOrUpdateCopy() sao chép trạng thái đối tượng không phiên sang trạng thái đối tượng phiên.

Tôi không chắc chắn bạn sẽ sử dụng NH như thế nào, nhưng đối với nhiều trường hợp, tất cả những gì bạn cần là Save(). Phiên làm việc TẤT CẢ công việc cần thiết để biết những gì cần phải được cập nhật và chỉ cần Flush() hoặc Commit() làm mọi thứ bạn cần.

+2

Bạn thường không cần SaveOrUpdate() vì NHibernate theo dõi các thay đổi đối với mọi đối tượng được tải. Để cập nhật một đối tượng sử dụng Session.Get(), hãy thay đổi sau đó gọi Session.Flush(). –

+0

Điều gì dễ đọc hơn hoặc có ý định tiết lộ trong đoạn mã sau đó: 'SaveOrUpdate()' hoặc 'Flush()'/'Commit()'? Hay nó không tạo ra sự khác biệt (ngữ nghĩa hay cách khác)? –

+0

Xóa hoàn toàn phiên của bạn có thể không cần thiết. Nếu bạn cam kết một giao dịch hoặc phiên đi ra khỏi phạm vi/được xử lý các thay đổi sẽ tự động được lưu giữ (hoặc sớm hơn nếu chúng cần phải vì một số lý do, tạo id hoặc tương tự). Flush là ý định tiết lộ (với tôi) khi bạn * cần * để buộc các thay đổi tự động, vì đọc-ioslation hoặc một số esoterica khác, và chỉ tiếng ồn khác. Bất kỳ ai quen thuộc với NH cũng sẽ hiểu được 'Cập nhật 'tiềm ẩn cho các thực thể được đính kèm, vì vậy tôi có xu hướng nghĩ về cùng một câu lệnh' SaveOrUpdate' rõ ràng. –

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