Sekarang. NET v3.5 SP1 telah dirilis (bersama dengan VS2008 SP1), kami sekarang memiliki akses ke .NET entity framework.
Pertanyaan saya adalah ini. Ketika mencoba memutuskan antara menggunakan Entity Framework dan LINQ untuk SQL sebagai ORM, apa bedanya?
Cara saya memahaminya, Kerangka Entitas (bila digunakan dengan LINQ untuk Entitas) adalah 'kakak' untuk LINQ to SQL? Jika ini masalahnya - keuntungan apa yang dimilikinya? Apa yang bisa dilakukan oleh LINQ ke SQL yang tidak bisa dilakukan sendiri?
.net
entity-framework
linq-to-sql
Chris Roberts
sumber
sumber
Jawaban:
LINQ ke SQL hanya mendukung pemetaan tabel, tampilan, sprocs, dan fungsi 1 hingga 1 yang tersedia di Microsoft SQL Server. Ini adalah API yang bagus untuk digunakan untuk konstruksi akses data cepat ke database SQL Server yang dirancang dengan baik. LINQ2SQL pertama kali dirilis dengan C # 3.0 dan .Net Framework 3.5.
LINQ to Entities (ADO.Net Entity Framework) adalah ORM (Object Relational Mapper) API yang memungkinkan definisi luas model domain objek dan hubungannya dengan banyak penyedia data ADO.Net yang berbeda. Dengan demikian, Anda dapat mencampur dan mencocokkan sejumlah vendor basis data, server aplikasi atau protokol yang berbeda untuk merancang gabungan objek yang dibangun dari berbagai tabel, sumber, layanan, dll. Kerangka ADO.Net dirilis dengan .Net Framework 3.5 SP1.
Ini adalah artikel pengantar yang bagus tentang MSDN: Memperkenalkan LINQ ke Data Relasional
sumber
Saya pikir jawaban cepat dan kotor adalah itu
sumber
Apakah LINQ ke SQL Benar-Benar Mati? oleh Jonathan Allen untuk InfoQ.com
sumber
Ada sejumlah perbedaan jelas yang diuraikan dalam artikel @ lars yang diposting, tetapi jawaban singkatnya adalah:
Premis aslinya adalah L2S untuk Rapid Development, dan EF untuk aplikasi n-tier lebih "enterprisey", tetapi menjual L2S sedikit pendek.
sumber
LINQ ke SQL
Kerangka Entitas
Lihat juga:
sumber
dbSet<Orders>.Where()...ToList()
? Saya pikir itu menyesatkan untuk memiliki Entity Framework yang ditentang dari LINQ ke SQL.Pengalaman saya dengan Entity Framework kurang dari bintang. Pertama, Anda harus mewarisi dari kelas dasar EF, jadi ucapkan selamat tinggal pada POCO. Desain Anda harus berada di sekitar EF. Dengan LinqtoSQL saya dapat menggunakan objek bisnis yang ada. Selain itu, tidak ada pemuatan malas, Anda harus menerapkannya sendiri. Ada beberapa pekerjaan di luar sana untuk menggunakan POCO dan pemuatan malas, tetapi ada IMHO karena EF belum siap. Saya berencana untuk kembali ke sana setelah 4.0
sumber
Saya menemukan jawaban yang sangat baik di sini yang menjelaskan kapan harus menggunakan apa yang dalam kata-kata sederhana:
sumber
Kesan saya adalah bahwa basis data Anda cukup kuat atau dirancang sangat buruk jika Linq2Sql tidak sesuai dengan kebutuhan Anda. Saya memiliki sekitar 10 situs web yang lebih besar dan lebih kecil semuanya menggunakan Linq2Sql. Saya telah melihat dan kerangka Entity berkali-kali tetapi saya tidak dapat menemukan alasan yang baik untuk menggunakannya di Linq2Sql. Yang mengatakan saya mencoba menggunakan database saya sebagai model jadi saya sudah memiliki pemetaan 1 banding 1 antara model dan database.
Di pekerjaan saya saat ini, kami memiliki database dengan 200 tabel. Database lama dengan banyak solusi buruk sehingga di sana saya bisa melihat manfaat Entity Framework daripada Linq2Sql tapi tetap saja saya lebih suka mendesain ulang database karena database adalah mesin aplikasi dan jika database dirancang dengan buruk dan lambat maka aplikasi saya juga akan lambat. Menggunakan kerangka kerja Entity pada basis data seperti itu sepertinya perbaikan cepat untuk menyamarkan model yang buruk tetapi tidak pernah bisa menyamarkan kinerja buruk yang Anda dapatkan dari basis data tersebut.
sumber
Anda dapat menemukan perbandingan yang bagus di sini:
http://www.dotnet-tricks.com/Tutorial/entityframework/1M5W300314-Difference-between-LINQ-to-SQL-and-Entity-Framework.html
http://www.c-sharpcorner.com/blogs/entity-framework-vs-linq-to-sql1
sumber
sqlmetal.exe
docs.microsoft.com/en-us/dotnet/framework/tools/… untuk menghasilkan kode / pemetaan dari database saat menggunakanLinq to SQL
Jawaban di sini telah mencakup banyak perbedaan antara Linq2Sql dan EF, tetapi ada poin kunci yang belum banyak diperhatikan: Linq2Sql hanya mendukung SQL Server sedangkan EF memiliki penyedia untuk RDBMS berikut:
Disediakan oleh Microsoft:
Melalui penyedia pihak ketiga:
untuk beberapa nama.
Hal ini menjadikan EF sebagai abstraksi pemrograman yang kuat atas penyimpanan data relasional Anda, artinya pengembang memiliki model pemrograman yang konsisten untuk bekerja terlepas dari penyimpanan data yang mendasarinya. Ini bisa sangat berguna dalam situasi di mana Anda sedang mengembangkan produk yang ingin Anda pastikan akan beroperasi dengan berbagai RDBMS umum.
Situasi lain di mana abstraksi itu berguna adalah di mana Anda menjadi bagian dari tim pengembangan yang bekerja dengan sejumlah pelanggan yang berbeda, atau unit bisnis yang berbeda dalam suatu organisasi, dan Anda ingin meningkatkan produktivitas pengembang dengan mengurangi jumlah RDBMS yang harus menjadi terbiasa dengan untuk mendukung berbagai aplikasi yang berbeda di atas RDBMS yang berbeda.
sumber
Saya menemukan bahwa saya tidak bisa menggunakan banyak basis data dalam model basis data yang sama saat menggunakan EF. Tetapi dalam linq2sql saya hanya bisa dengan mengawali nama skema dengan nama database.
Ini adalah salah satu alasan saya awalnya mulai bekerja dengan linq2sql. Saya tidak tahu apakah EF belum mengizinkan fungsi ini, tetapi saya ingat membaca bahwa itu dimaksudkan untuk tidak mengizinkan ini.
sumber
Jika database Anda mudah dan sederhana, LINQ to SQL akan melakukannya. Jika Anda membutuhkan entitas logis / abstrak di atas tabel Anda, kemudian pergi ke Entity Framework.
sumber
Belum mendukung tipe data SQL 2008 yang unik. Perbedaan dari perspektif saya adalah bahwa Entity masih memiliki kesempatan untuk membangun sebuah model di sekitar tipe data geografis saya di beberapa rilis di masa depan, dan Linq ke SQL, ditinggalkan, tidak akan pernah.
Bertanya-tanya ada apa dengan nHibernate, atau OpenAccess ...
sumber
Saya pikir jika Anda perlu mengembangkan sesuatu dengan cepat tanpa hal-hal aneh di tengah, dan Anda membutuhkan fasilitas untuk memiliki entitas yang mewakili tabel Anda:
Linq2Sql bisa menjadi sekutu yang baik, menggunakannya dengan LinQ melepaskan waktu pengembangan yang bagus.
sumber
Saya bekerja untuk pelanggan yang memiliki proyek besar yang menggunakan Linq-to-SQL. Ketika proyek dimulai itu adalah pilihan yang jelas, karena Kerangka Entitas kekurangan beberapa fitur utama pada waktu itu dan kinerja Linq-to-SQL jauh lebih baik.
Sekarang EF telah berkembang dan Linq-to-SQL tidak memiliki dukungan async, yang sangat bagus untuk layanan yang sangat skalabel. Kami terkadang memiliki 100+ permintaan per detik dan meskipun kami telah mengoptimalkan basis data kami, sebagian besar kueri masih membutuhkan beberapa milidetik untuk diselesaikan. Karena panggilan basis data yang sinkron, utas diblokir dan tidak tersedia untuk permintaan lainnya.
Kami berpikir untuk beralih ke Entity Framework, semata-mata untuk fitur ini. Sayang sekali Microsoft tidak menerapkan dukungan async ke Linq-to-SQL (atau sumber terbuka, sehingga komunitas bisa melakukannya).
Tambahan Desember 2018: Microsoft bergerak ke arah .NET Core dan Linq-2-SQL tidak mendukung .NET Core, jadi Anda harus pindah ke EF untuk memastikan Anda dapat bermigrasi ke EF.Core di masa mendatang.
Ada juga beberapa opsi lain untuk dipertimbangkan, seperti LLBLGen . Ini adalah solusi ORM matang yang sudah ada sejak lama dan telah terbukti lebih tahan di masa depan daripada solusi data MS (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).
sumber
Ini adalah penyedia hanya mendukung SQL Server. Ini adalah teknologi pemetaan untuk memetakan tabel database SQL Server ke objek .NET. Adalah upaya pertama Microsoft pada ORM - Object-Relational Mapper.
Adalah ide yang sama, tetapi menggunakan Kerangka Entitas di latar belakang, seperti ORM - lagi dari Microsoft, Mendukung beberapa basis data keuntungan utama dari kerangka entitas adalah pengembang dapat bekerja pada basis data apa pun tidak perlu mempelajari sintaks untuk melakukan operasi pada berbagai basis data yang berbeda
sumber