Tôi đang sử dụng Nhibernate (Tôi là một noob hoàn chỉnh), và những gì tôi muốn có thể làm là sao chép một thực thể được tải từ cơ sở dữ liệu và lưu nó với một Id mới. .. có ai chạy vào tình huống này không? Bất kỳ trợ giúp sẽ được rất đánh giá cao.Làm cách nào để sao chép một đối tượng bằng NHibernate
Trả lời
tôi cần phải thực hiện chính xác này cho một bộ rất phức tạp của các đối tượng và những gì tôi đã tìm thấy cho đến nay là:
NHibernate không chính xác hỗ trợ này.
Nếu bạn cố gắng chỉ đơn giản là thay thế Id của một đối tượng bạn nhận được từ một phiên, bạn sẽ nhận được một lỗi Nhibernate: định danh của một thể hiện của đã được thay đổi từ < 9ae3868d-17bf-4314-ba0c-4eb3b44b1a2e> để < 2b2b67c6 -a421-48c4-836c-4c27f6481718>
Nếu phiên không còn biết về các đối tượng được truy xuất, nghĩa là nếu bạn gỡ bỏ chúng trước khi lưu và xả, chỉ cần thay đổi id sẽ hoạt động. Vì vậy, bạn có thể viết code như thế này:
public void CloneStudent(Guid studentId)
{
// Get existing student
Student student = _session.Get<Student>(studentId);
// Copy by reference
Student newStudent = student;
// Reset Id to do quick and dirty clone
newStudent.Id = Guid.NewGuid();
newStudent.Sticker = "D";
// Must evict existing object or Nhibernate will throw object modified error
_session.Evict(student);
// Save new object
_session.Save(newStudent);
_session.Flush();
}
Vấn đề ở đây là nếu đồ thị đối tượng của bạn có bất kỳ độ sâu bạn phải chắc chắn để đuổi toàn bộ tập, và sau đó bạn có thể cần bản chính trong phiên vẫn bạn phải lấy lại chúng. Đây là một nhức đầu hậu cần và sản lượng mã với ý định rất mơ hồ và phức tạp.
Tôi không khuyến nghị.
Điều thường được thực hiện là tuần tự hóa thành luồng nhị phân và kết hợp lại luồng này thành một nhóm đối tượng mới. Tốt, nhưng chỉ hoạt động nếu các đối tượng của bạn đều có thể tuần tự hóa được.
Đó không phải là trường hợp đối với tôi, những gì tôi đang làm là tôi đã viết mã thủ công để tạo bản sao sâu của một biểu đồ đối tượng bằng cách sử dụng các nhà xây dựng sao chép. Điều này phức tạp và cũng có thể dẫn đến các vấn đề bảo trì, nhưng nếu các đối tượng không thể được tuần tự hóa thì có một vài lựa chọn thay thế tốt hơn.
Rất tiếc, các đối tượng sao chép sâu vẫn là một nhiệm vụ phức tạp nếu việc tuần tự hóa không phải là một tùy chọn.
Chỉ cần new MyClass()
và sao chép mọi thứ ngoại trừ Id. Bạn có thể sử dụng sự phản chiếu cho điều đó.
- 1. Làm cách nào để sao chép/sao chép một thể hiện của đối tượng trong CoffeeScript?
- 2. Làm thế nào để sao chép các đối tượng trong NHibernate?
- 3. Làm cách nào để sao chép đối tượng JAXB
- 4. Làm cách nào để sao chép một đối tượng (bản sao sâu) trong Dart?
- 5. Làm thế nào để sao chép đối tượng trong Qt?
- 6. Làm thế nào để sao chép đối tượng js?
- 7. Sao chép đối tượng vào một khác
- 8. AS3 - Sao chép một đối tượng
- 9. Làm thế nào để xóa một đối tượng bằng cách sử dụng PK trong nhibernate?
- 10. Làm cách nào để xóa đối tượng NHibernate bằng cách sử dụng tiêu chí?
- 11. Làm cách nào để sao chép một đối tượng Từ điển?
- 12. Sử dụng Bưu kiện để sao chép một đối tượng?
- 13. Làm thế nào để bạn sao chép một đối tượng PHP vào một loại đối tượng khác nhau
- 14. Perl: Làm thế nào để sao chép sâu một đối tượng may mắn?
- 15. làm thế nào để sao chép một đối tượng trong Android?
- 16. Làm thế nào để sao chép một đối tượng trong Flex?
- 17. C++ sao chép đối tượng luồng
- 18. Làm thế nào để xóa đối tượng con trong NHibernate?
- 19. cách sao chép từ một đối tượng chuỗi này sang đối tượng khác trong C++?
- 20. Làm thế nào để bạn sao chép một BufferedImage
- 21. Thêm phương thức vào một đối tượng được sao chép
- 22. Javascript đối tượng sao chép sâu
- 23. Làm cách nào để sao chép/sao chép một số loại UIView cho iOS?
- 24. Sao chép một đối tượng vào thiết bị?
- 25. Sao chép thuộc tính đối tượng Javascript
- 26. Làm cách nào để lưu một đối tượng tạm thời đã tồn tại trong phiên NHibernate?
- 27. Làm cách nào để sao chép dữ liệu của một phần tử bằng jQuery?
- 28. Làm cách nào để sao chép hình ảnh và văn bản vào khay nhớ tạm làm một đối tượng?
- 29. Sao chép constructor: sâu sao chép một lớp trừu tượng
- 30. Làm cách nào để sao chép một khối vectơ sang
Cảm ơn bạn đã gợi ý Sisyphus, tôi sợ những gì bạn vừa đề xuất, nhưng may mắn là tôi có sự tiện lợi khi có tất cả các đối tượng thực thể của mình đang được tuần tự hóa. Tôi sẽ thử và cho bạn biết nó hoạt động như thế nào. – PCG