- Penyambungan koneksi ditangani seperti pada aplikasi ADO.NET lainnya. Koneksi entitas masih menggunakan koneksi database tradisional dengan string koneksi tradisional. Saya percaya Anda dapat mematikan koneksi koneksi dalam string koneksi jika Anda tidak ingin menggunakannya. (baca lebih lanjut tentang SQL Server Connection Pooling (ADO.NET) )
- Jangan pernah menggunakan konteks global. ObjectContext secara internal mengimplementasikan beberapa pola termasuk Identity Map dan Unit of Work. Dampak penggunaan konteks global berbeda untuk setiap jenis aplikasi.
- Untuk aplikasi web gunakan konteks tunggal per permintaan. Untuk layanan web, gunakan satu konteks per panggilan. Dalam aplikasi WinForms atau WPF gunakan konteks tunggal per formulir atau per presenter. Mungkin ada beberapa persyaratan khusus yang tidak memungkinkan untuk menggunakan pendekatan ini tetapi dalam kebanyakan situasi ini sudah cukup.
Jika Anda ingin tahu dampak apa yang memiliki konteks objek tunggal untuk aplikasi WPF / WinForm, periksa artikel ini . Ini tentang Sesi NHibernate tetapi idenya sama.
Edit:
Saat Anda menggunakan EF, secara default memuat setiap entitas hanya satu kali per konteks. Kueri pertama membuat instace entitas dan menyimpannya secara internal. Kueri selanjutnya yang memerlukan entitas dengan kunci yang sama mengembalikan instance yang disimpan ini. Jika nilai dalam penyimpanan data berubah, Anda masih menerima entitas dengan nilai dari kueri awal. Ini disebut pola peta Identitas . Anda bisa memaksa konteks objek untuk memuat ulang entitas tetapi akan memuat ulang satu contoh bersama.
Setiap perubahan yang dilakukan pada entitas tidak bertahan sampai Anda memanggil SaveChanges
konteksnya. Anda dapat melakukan perubahan di banyak entitas dan menyimpannya sekaligus. Ini disebut pola Unit Kerja . Anda tidak dapat secara selektif mengatakan entitas terlampir yang dimodifikasi yang ingin Anda simpan.
Kombinasikan dua pola ini dan Anda akan melihat beberapa efek menarik. Anda hanya memiliki satu instance entitas untuk seluruh aplikasi. Setiap perubahan pada entitas memengaruhi seluruh aplikasi meskipun perubahan belum dilakukan (berkomitmen). Dalam kebanyakan kali ini bukan yang Anda inginkan. Misalkan Anda memiliki formulir edit dalam aplikasi WPF. Anda bekerja dengan entitas dan Anda memutuskan untuk membatalkan editasi kompleks (mengubah nilai, menambahkan entitas terkait, menghapus entitas terkait lainnya, dll.). Tetapi entitas sudah dimodifikasi dalam konteks bersama. Apa yang akan kamu lakukan? Petunjuk: Saya tidak tahu tentang CancelChanges atau UndoChanges aktif ObjectContext
.
Saya pikir kita tidak perlu membahas skenario server. Cukup berbagi satu entitas di antara beberapa permintaan HTTP atau panggilan layanan Web membuat aplikasi Anda tidak berguna. Setiap permintaan dapat memicu SaveChanges
dan menyimpan sebagian data dari permintaan lain karena Anda berbagi satu unit kerja di antara semuanya. Ini juga akan memiliki masalah lain - konteks dan manipulasi dengan entitas dalam konteks atau koneksi database yang digunakan oleh konteks tidak aman thread.
Bahkan untuk aplikasi yang hanya bisa dibaca, konteks global bukanlah pilihan yang baik karena Anda mungkin menginginkan data baru setiap kali Anda meminta aplikasi.