Sepertinya ini adalah masalah umum, tetapi saya tidak tahu cara terbaik untuk menyelesaikannya. Saya ingin dapat mengirim Entitas ke tampilan, melakukan perubahan pada entitas dalam tampilan, tetapi kemudian membatalkan (menghapus) perubahan tersebut jika pengguna membatalkan tampilan. Apa cara yang tepat untuk melakukan ini.
Berikut adalah dua opsi yang saya miliki tetapi menurut saya seharusnya ada opsi lain yang lebih baik
1) Ambil entitas, buat klon, kirim klon ke tampilan...jika perubahan diterima, perbarui entitas asli dengan nilai klon
2) Kirim entitas ke tampilan, jika pengguna membatalkan, hapus entitas dari cache NHibernate dan muat ulang dari database
Untuk (2), masalah bagi saya adalah entitas lama masih dapat direferensikan di seluruh proyek saya setelah dihapus dari cache.
Sunting:
Oke, jadi metode evict adalah cara yang harus dilakukan jika saya menerapkan metode (2). Terima kasih, saya tidak dapat mengingat detailnya. Namun, masalah objek tampilan yang merujuk pada entitas lama saya yang telah diusir membuat masalah ini sulit untuk ditangani. Saya tidak bisa begitu saja membuat tampilan saya diperbarui secara otomatis ke entitas baru tanpa memiliki kode khusus di masing-masing entitas untuk diikat ulang ketika peristiwa penggusuran khusus saya dimunculkan. Dan rebinding mungkin bukan hal yang sepele dalam kasus tertentu. Saya perlu memikirkan hal ini lagi karena mungkin terlalu rumit, tetapi saat ini, metode ini tampaknya lebih rumit.
Saya kira saya akan terjebak dengan metode (1) yang memiliki serangkaian masalahnya sendiri tetapi akan menunggu lebih lama untuk melihat apakah ada orang lain yang punya ide.
Edit 2: Baru saja menemukan ini. Saya pikir ini cukup banyak mencakup jawaban secara detail dan dilengkapi dengan proyek demo yang hebat - Membangun Aplikasi Agenda Desktop dengan NHibernate - http://msdn.microsoft.com/en-us/magazine/ee819139.aspx
Selain itu, NHibernate memiliki fungsi Session.Refresh(Object entitas) yang tampaknya menyelesaikan masalah sebenarnya. Jadi, ketika suatu entitas diubah tetapi kemudian dibatalkan sebelum disimpan, saya cukup memanggil Session.Refresh untuk memuatnya kembali dari database dan membuang perubahannya.
Refresh
terjadi ketika entitas memiliki hubungan bertingkat, maka anak-anak tersebut (entitas terkait) juga akan disegarkan - Hal ini dapat menyebabkan dampak kinerja yang nyata. Saya baru saja menghadapi masalah yang saya jelaskan, jadi informasi ini dapat membantu orang lain - person jweyrich   schedule 21.12.2015