Tôi mới dùng nHibernate, và cố gắng để có được đầu của tôi xung quanh cách thích hợp để cập nhật các đối tượng tách ra từ một POST mẫu ứng dụng web. (Chúng tôi đang sử dụng ASP.NET MVC)Cách thích hợp để cập nhật thực thể nhibernate từ phương thức hành động POST asp.net là gì?
Đối tượng Tôi đang cố gắng để cập nhật chứa (trong số những thứ khác) một IList của các đối tượng trẻ em, ánh xạ một cái gì đó như thế này:
<bag name="PlannedSlices" inverse="true" cascade="all-delete-orphan">
<key column="JobNumber" />
<one-to-many class="SliceClass" />
</bag>
Chúng tôi đã sắp xếp của chúng tôi MVC chỉnh sửa xem hình thức để khi nó được đăng trở lại, phương pháp hành động của chúng tôi được thông qua am đối tượng (incluing Danh sách <> của các mặt hàng con.Chúng tôi round-trip tất cả các ID của tổ chức một cách chính xác thông qua các hình thức. phương thức hành động post thực hiện một session.SaveOrUpdate (parentObject), với parentObject đã được cạo từ dạng xem theo chế độ mặc định lbinder.
Điều này dường như làm việc tốt cho bất kỳ tình huống sau đây:
- Tạo một đối tượng cha mẹ mới
- Sửa đổi thuộc tính của cha mẹ
- Thêm con mới đối tượng
- Sửa đổi con hiện có đối tượng (Nhìn vào các bản ghi nHibernate, tôi có thể thấy nó được thiết lập chính xác nếu các đối tượng là mới hoặc hiện có và phát hành UPDATE hoặc INSERT thích hợp)
Kịch bản thất bại là: - Xóa đối tượng con - nghĩa là nếu chúng không nằm trong IList, chúng sẽ không bị xóa khỏi cơ sở dữ liệu. Không có ngoại lệ hoặc bất cứ điều gì, họ chỉ không bị xóa.
Sự hiểu biết của tôi là vì ma thuật mà nHibernate thực hiện để tạo danh sách trẻ em yêu cầu xóa không hoạt động với các cá thể tách rời.
Tôi đã không thể tìm thấy một ví dụ đơn giản về phương thức hành động này sẽ như thế nào với nHibernate (ví dụ: sử dụng đối tượng mô hình kết hợp như một cá thể nHibernate tách rời) - ví dụ dựa trên MS EF (ví dụ: http://stephenwalther.com/blog/archive/2009/02/27/chapter-5-understanding-models.aspx) dường như sử dụng phương thức 'ApplyPropertyChanges' để sao chép các thuộc tính đã thay đổi từ đối tượng mô hình bị ràng buộc sang đối tượng thực thể được nạp lại. Vì vậy, sau khi tất cả, câu hỏi là khá đơn giản - nếu tôi có chất kết dính mô hình cho tôi một đối tượng mới có chứa bộ sưu tập các đối tượng con, làm thế nào tôi nên cập nhật thông qua nHibernate, (nơi 'cập nhật' bao gồm có thể xóa của trẻ em)?
Cảm ơn rất nhiều vì điều này - rất nhiều công việc ở đó! Thật không may, bit mà tôi đang gặp phải là đối tượng 'Person' tôi có trong phiên thứ hai/giao dịch (tức là POST của tôi) là một đối tượng hoàn toàn mới được tạo bởi ModelBinder, chứ không phải là đối tượng đã truy xuất đã có vài trường đã được sửa đổi và có một vài cuộc gọi 'xóa con' được thực hiện trên đó. Tôi nghĩ rằng những gì tôi đang tìm kiếm là một cách để lấy đối tượng mới đó và áp dụng các thay đổi của nó cho đối tượng đã truy xuất, để sau đó nh có thể làm việc với SQL cần thiết. Có lẽ điều đó không tồn tại. –
Cách tôi có xu hướng đối phó với tình huống đó là bằng cách xử lý đối tượng mới được tạo bởi trình kết nối mô hình làm đối tượng Mô hình trình bày. Bạn sẽ vẫn cần truy xuất đối tượng (hoặc bằng cách nào đó tạo một thể hiện của lớp "persisted") mà bạn muốn cập nhật và áp dụng các bản cập nhật đó cho đối tượng đó. Sau đó bạn có thể lưu đối tượng đó vào NHibernate. Điều đó có ý nghĩa? –
Vì vậy, bạn sẽ 'theo cách thủ công' (nghĩa là thuộc tính, theo vòng hoặc bất kỳ bộ sưu tập con nào), ghi đè lên các thuộc tính của đối tượng 'được truy xuất' với thuộc tính của đối tượng 'bản trình bày (tức là POST)'? Và tự tính toán các yêu cầu xóa trẻ em? Có vẻ là một công việc nhiều hơn một chút (và bảo trì!) Hơn tôi đã hy vọng. Dường như có vẻ đáng làm phiền với người mô hình, thực sự, như thể tôi phải xử lý từng lĩnh vực một lần tôi cũng có thể kéo họ thẳng từ phản hồi của biểu mẫu. Cảm ơn sự giúp đỡ của bạn. –