Bagaimana Anda menilai masing-masing dalam hal:
- Performa
- Kecepatan pengembangan
- Kode rapi, intuitif, dapat dipelihara
- Fleksibilitas
- Secara keseluruhan
Saya suka SQL saya dan karena itu selalu menjadi penggemar berat dari ADO.NET dan prosedur tersimpan tetapi saya baru-baru ini bermain dengan Linq ke SQL dan terpesona oleh seberapa cepat saya menulis lapisan DataAccess saya dan telah memutuskan untuk menghabiskan beberapa waktu benar-benar memahami baik Linq to SQL atau EF ... atau tidak?
Saya hanya ingin memeriksa, bahwa tidak ada kesalahan besar dalam teknologi ini yang akan membuat waktu penelitian saya menjadi tidak berguna. Misalnya kinerjanya buruk, itu keren untuk aplikasi sederhana tetapi hanya bisa membawa Anda sejauh ini.
Pembaruan: Dapatkah Anda berkonsentrasi pada EF VS L2S VS SPs daripada ORM VS SPs. Saya terutama tertarik dengan EF VS L2S. Tetapi saya ingin memilikinya dibandingkan dengan procs yang disimpan juga karena SQl biasa adalah sesuatu yang saya tahu banyak tentang.
sumber
Jawaban:
Pertama, jika Anda memulai proyek baru, gunakan Entity Framework ("EF") - sekarang menghasilkan SQL yang jauh lebih baik (lebih seperti Linq ke SQL) dan lebih mudah untuk mempertahankan dan lebih kuat daripada Linq ke SQL (" L2S "). Pada rilis. NET 4.0, saya menganggap Linq to SQL sebagai teknologi yang usang. MS sangat terbuka untuk tidak melanjutkan pengembangan L2S lebih lanjut.
1) Kinerja
Ini sulit dijawab. Untuk sebagian besar operasi entitas tunggal ( CRUD ), Anda akan menemukan kinerja yang setara dengan ketiga teknologi. Anda harus tahu cara kerja EF dan Linq to SQL untuk menggunakannya secara maksimal. Untuk operasi volume tinggi seperti kueri pemungutan suara, Anda mungkin ingin EF / L2S "mengkompilasi" kueri entitas Anda sedemikian rupa sehingga kerangka kerja tidak harus terus-menerus membuat ulang SQL, atau Anda dapat mengalami masalah skalabilitas. (lihat hasil edit)
Untuk pembaruan massal di mana Anda memperbarui data dalam jumlah besar, SQL mentah atau prosedur tersimpan akan selalu berkinerja lebih baik daripada solusi ORM karena Anda tidak harus menyusun data melalui kawat ke ORM untuk melakukan pembaruan.
2) Kecepatan Pengembangan
Dalam sebagian besar skenario, EF akan menerbangkan SQL / procs tersimpan telanjang ketika datang ke kecepatan pengembangan. Perancang EF dapat memperbarui model Anda dari basis data saat ia berubah (atas permintaan), sehingga Anda tidak mengalami masalah sinkronisasi antara kode objek dan kode basis data Anda. Satu-satunya waktu saya tidak akan mempertimbangkan menggunakan ORM adalah ketika Anda sedang melakukan aplikasi tipe pelaporan / dashboard di mana Anda tidak melakukan pembaruan, atau ketika Anda membuat aplikasi hanya untuk melakukan operasi pemeliharaan data mentah pada database.
3) Kode rapi / Maintainable
Hands down, EF mengalahkan SQL / sprocs. Karena hubungan Anda dimodelkan, bergabung dalam kode Anda relatif jarang. Hubungan entitas hampir jelas bagi pembaca untuk sebagian besar pertanyaan. Tidak ada yang lebih buruk daripada harus beralih dari tingkat ke tingkat debugging atau melalui beberapa SQL / tingkat menengah untuk memahami apa yang sebenarnya terjadi pada data Anda. EF membawa model data Anda ke dalam kode Anda dengan cara yang sangat kuat.
4) Fleksibilitas
Procs yang disimpan dan SQL mentah lebih "fleksibel". Anda dapat memanfaatkan sprocs dan SQL untuk menghasilkan kueri yang lebih cepat untuk kasus spesifik yang aneh, dan Anda dapat memanfaatkan fungsionalitas DB asli lebih mudah daripada dengan ORM.
5) Secara keseluruhan
Jangan terjebak dalam dikotomi keliru dalam memilih ORM vs menggunakan prosedur tersimpan. Anda dapat menggunakan keduanya dalam aplikasi yang sama, dan Anda mungkin harus melakukannya. Operasi massal besar harus menggunakan prosedur tersimpan atau SQL (yang sebenarnya bisa disebut oleh EF), dan EF harus digunakan untuk operasi CRUD Anda dan sebagian besar kebutuhan tingkat menengah Anda. Mungkin Anda akan memilih untuk menggunakan SQL untuk menulis laporan Anda. Saya kira moral ceritanya sama seperti sebelumnya. Gunakan alat yang tepat untuk pekerjaan itu. Tetapi kurusnya, EF sangat bagus saat ini (pada. NET 4.0). Habiskan waktu nyata membaca dan memahaminya secara mendalam dan Anda dapat membuat beberapa aplikasi luar biasa, berkinerja tinggi dengan mudah.
EDIT : EF 5 menyederhanakan bagian ini sedikit dengan Kueri LINQ yang dikompilasi otomatis , tetapi untuk hal-hal bervolume tinggi nyata, Anda pasti perlu menguji dan menganalisis apa yang paling cocok untuk Anda di dunia nyata.
sumber
Prosedur tersimpan:
(+)
(-)
ORM:
(+)
(-)
Pengorbanan umumnya adalah antara memiliki fleksibilitas yang hebat dan kehilangan banyak waktu vs dibatasi dalam apa yang dapat Anda lakukan tetapi melakukannya dengan sangat cepat.
Tidak ada jawaban umum untuk pertanyaan ini. Ini masalah perang suci. Juga tergantung pada proyek yang Anda hadapi dan kebutuhan Anda. Ambil yang terbaik untuk Anda.
sumber
As any abstraction can produce "high-level" developers having no idea how it works under the hood
pertanyaan Anda pada dasarnya adalah O / RM vs tulisan tangan SQL
Menggunakan ORM atau SQL biasa?
Lihatlah beberapa solusi O / RM lain di luar sana, L2S bukan satu-satunya (NHibernate, ActiveRecord)
http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software
untuk menjawab pertanyaan spesifik:
sumber
LINQ-to-SQL adalah teknologi luar biasa yang sangat mudah digunakan, dan pada umumnya menghasilkan pertanyaan yang sangat bagus ke bagian belakang. LINQ-to-EF dijadwalkan menggantikannya, tetapi secara historis sangat kikuk untuk menggunakan dan menghasilkan SQL yang jauh lebih rendah. Saya tidak tahu keadaan saat ini, tetapi Microsoft berjanji untuk memigrasi semua kebaikan L2S ke L2EF, jadi mungkin sekarang semuanya lebih baik.
Secara pribadi, saya sangat tidak menyukai alat ORM (lihat cacian saya di sini untuk detailnya), jadi saya tidak melihat alasan untuk menyukai L2EF, karena L2S memberi saya semua yang saya harapkan dari lapisan akses data. Bahkan, saya bahkan berpikir bahwa fitur L2S seperti pemetaan kerajinan tangan dan pemodelan pewarisan menambahkan kompleksitas yang sama sekali tidak perlu. Tapi itu hanya aku. ;-)
sumber
Ada pendekatan yang sama sekali baru yang mungkin ingin Anda pertimbangkan jika yang Anda kejar adalah kekuatan dan kinerja prosedur tersimpan, dan perkembangan cepat yang disediakan alat-alat seperti Kerangka Entitas.
Saya telah mengambil SQL + untuk test drive pada proyek kecil, dan itu benar-benar sesuatu yang istimewa. Anda pada dasarnya menambahkan jumlah komentar pada rutinitas SQL Anda, dan komentar itu memberikan instruksi kepada pembuat kode, yang kemudian membangun pustaka kelas berorientasi objek yang sangat bagus berdasarkan pada rutin SQL aktual. Jenis kerangka entitas suka secara terbalik.
Parameter input menjadi bagian dari objek input, parameter output dan set hasil menjadi bagian dari objek output, dan komponen layanan menyediakan panggilan metode.
Jika Anda ingin menggunakan prosedur tersimpan, tetapi masih menginginkan perkembangan yang cepat, Anda mungkin ingin melihat hal-hal ini.
sumber