Saya menulis berikut ini beberapa waktu lalu, tapi saya datang untuk memeriksanya baru-baru ini, dan sekarang tidak berpikir itu desain yang bagus.
Desainnya adalah untuk semacam lapisan basis data modular menggunakan Entity Framework 4. Ada objek database tunggal yang memuat (lazy) konteks kerangka entitas dari perpustakaan eksternal di lokasi tertentu, dan contoh konteks yang dimuat disimpan dalam tabel hash terhadap nama mereka (EG "ContentMgmtContext").
Semua kontak dengan database dalam sistem ini adalah melalui prosedur tersimpan. Untuk melakukan panggilan ke database, tanda tangan metode kueri terlihat seperti ini:
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
Modularitas ini adalah sesuatu yang saya sukai. Namun, ada satu kelemahan signifikan terhadap pendekatan ini: when using the database layer, the code using it has to have a reference to the library in which the context is stored, in order to access the types returned by the stored procedures through Entity Framework.
Dalam model, objek dari lapisan database diterjemahkan ke objek baru yang digunakan tampilan dan pengontrol.
Saya pikir ini desain yang buruk, tetapi bagaimana saya bisa memperbaikinya? Saya telah mempertimbangkan untuk menambahkan antarmuka kosong seperti IStoredProecedureObject
untuk memberikan setiap tipe data yang dikembalikan oleh prosedur tersimpan tipe basis umum, namun ini tampaknya digagalkan oleh Entity Framework. Setiap kali .edmx
file dikompilasi ulang, kode dihasilkan lagi, dan penambahan apa pun dihapus. Apakah ada cara untuk menghentikan ini terjadi?
Bagaimana saya bisa meningkatkan desain ini? Apa yang salah dengannya? Atau apakah saya di jalur yang benar?