Pertanyaan Entity Framework vs LINQ to SQL


Sekarang .NET v3.5 SP1 telah dirilis (bersama dengan VS2008 SP1), kami sekarang memiliki akses ke kerangka entitas .NET.

Pertanyaan saya adalah ini. Ketika mencoba memutuskan antara menggunakan Entity Framework dan LINQ to SQL sebagai ORM, apa bedanya?

Cara saya memahaminya, Entity Framework (bila digunakan dengan LINQ to Entities) adalah 'kakak' untuk LINQ to SQL? Jika ini masalahnya - kelebihan apa yang dimilikinya? Apa yang bisa ia lakukan yang LINQ to SQL tidak bisa lakukan sendiri?


750
2017-08-12 11:04


asal


Jawaban:


LINQ to SQL hanya mendukung 1 hingga 1 pemetaan tabel database, pandangan, sprocs dan fungsi 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 untuk definisi luas dari model domain objek dan hubungannya dengan banyak penyedia data ADO.Net yang berbeda. Dengan demikian, Anda dapat mencampur dan mencocokkan sejumlah vendor database yang berbeda, server aplikasi atau protokol untuk mendesain kumpulan objek yang terkumpul yang dibuat 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


442
2017-09-21 03:22



Saya pikir jawaban yang cepat dan kotor adalah itu

  • LINQ to SQL adalah cara cepat dan mudah untuk melakukannya. Ini berarti Anda akan berjalan lebih cepat, dan memberikan lebih cepat jika Anda mengerjakan sesuatu yang lebih kecil.
  • Kerangka Entitas adalah cara habis-habisan dan tidak ada larangan untuk melakukannya. Ini berarti Anda akan mengambil lebih banyak waktu di depan, berkembang lebih lambat, dan memiliki lebih banyak fleksibilitas jika Anda mengerjakan sesuatu yang lebih besar.

188
2017-08-12 16:00



Apakah LINQ to SQL Truly Dead? oleh Jonathan Allen untuk InfoQ.com

Matt Warren menjelaskan [LINQ to SQL] sebagai sesuatu yang "tidak pernah ada." Pada dasarnya, itu hanya harus berdiri untuk membantu mereka mengembangkan LINQ sampai ORM nyata siap.

...

Skala Kerangka Entitas menyebabkannya kehilangan tenggat waktu .NET 3.5 / Visual Studio 2008. Ini selesai tepat waktu untuk yang bernama ".NET 3.5 Service Pack 1", yang lebih mirip rilis utama daripada paket layanan.

...

Pengembang tidak suka [ADO.NET Entity Framework] karena kerumitannya.

...

mulai .NET 4.0, LINQ to Entities akan menjadi solusi akses data yang direkomendasikan untuk LINQ ke skenario relasional.


103
2017-11-03 15:53



Ada sejumlah perbedaan jelas yang diuraikan dalam artikel yang diposting @lars, tetapi jawaban singkatnya adalah:

  • L2S digabungkan erat - properti objek ke bidang tertentu dari database atau pemetaan objek yang lebih tepat ke skema basis data spesifik
  • L2S hanya akan bekerja dengan SQL Server (sejauh yang saya tahu)
  • EF memungkinkan pemetaan satu kelas ke beberapa tabel
  • EF akan menangani hubungan M-M
  • EF akan memiliki kemampuan untuk menargetkan penyedia data ADO.NET

Premis awal adalah L2S untuk Rapid Development, dan EF untuk aplikasi "tiernis" yang lebih "masuk", tetapi yang menjual L2S sedikit pendek.


85
2017-08-12 11:15



LINQ to SQL

  1. Sumber data homogen: SQL Server
  2. Dianjurkan untuk proyek-proyek kecil hanya di mana struktur data dirancang dengan baik
  3. Pemetaan dapat diubah tanpa recompilling dengan SqlMetal.exe
  4. .dbml (Bahasa Markup Database)
  5. Satu-ke-satu pemetaan antara tabel dan kelas
  6. Mendukung TPH warisan
  7. Tidak mendukung tipe kompleks
  8. Pendekatan penyimpanan pertama
  9. Tampilan database-sentris dari database
  10. Dibuat oleh tim C #
  11. Didukung tetapi tidak perbaikan lebih lanjut dimaksudkan

Kerangka Entitas

  1. Sumber data Heterogeneus: Mendukung banyak penyedia data
  2. Disarankan untuk semua proyek baru kecuali:
    • yang kecil (LINQ to SQL)
    • ketika sumber data adalah file datar (ADO.NET)
  3. Pemetaan dapat diubah tanpa dikompilasi ulang saat mengatur model dan memetakan file Metadata Artifact Process untuk Menyalin ke Direktori Output
  4. .edmx (Model Data Entitas) yang berisi:
    • SSDL (Storage Schema Definition Language)
    • CSDL (Definisi Skema Definisi Bahasa)
    • MSL (Pemetaan Bahasa Spesifikasi)
  5. Satu-ke-satu, satu-ke-banyak, banyak-ke-satu pemetaan antara tabel dan kelas
  6. Mendukung pewarisan:
    • TPH (Table Per Hierarchy)
    • TPT (Tabel Per Jenis)
    • TPC (Tabel Per Kelas Beton)
  7. Mendukung tipe kompleks
  8. Kode-pertama, Model-pertama, pendekatan Storage-first
  9. Tampilan berpusat pada aplikasi dari database
  10. Dibuat oleh tim SQL Server
  11. Masa Depan API Data Microsoft

Lihat juga:


55
2018-04-21 08:26



Pengalaman saya dengan Entity Framework kurang dari bintang. Pertama, Anda harus mewarisi dari kelas dasar EF, jadi ucapkan selamat tinggal kepada POCOs. Desain Anda harus berada di sekitar EF. Dengan LinqtoSQL saya bisa menggunakan objek bisnis saya 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 mereka ada IMHO karena EF belum siap. Saya berencana untuk kembali ke sana setelah 4.0


49
2017-12-08 03:50



Saya menemukan jawaban yang sangat bagus sini yang menjelaskan kapan menggunakan kata sederhana:

Aturan dasar praktis untuk kerangka kerja yang digunakan adalah bagaimana merencanakannya   mengedit data Anda di lapisan presentasi Anda.

  • Linq-To-Sql - gunakan kerangka kerja ini jika Anda berencana mengedit satu-ke-satu   hubungan data Anda di lapisan presentasi Anda. Berarti kamu   jangan berencana untuk menggabungkan data dari lebih dari satu tabel dalam satu tampilan   atau halaman.

  • Kerangka Entitas - gunakan kerangka ini jika Anda berencana   menggabungkan data dari lebih dari satu tabel di tampilan atau halaman Anda. Untuk membuat   ini lebih jelas, istilah di atas khusus untuk data yang akan   dimanipulasi dalam tampilan atau halaman Anda, bukan hanya ditampilkan. Ini adalah   penting untuk dipahami.

Dengan Kerangka Badan, Anda dapat "menggabungkan" data tabulasi menjadi satu   untuk menyajikan ke lapisan presentasi dalam bentuk yang dapat diedit, dan kemudian   ketika formulir itu dikirimkan, EF akan tahu cara memperbarui SEMUA data   dari berbagai tabel.

Mungkin ada alasan yang lebih akurat untuk memilih EF daripada L2S, tetapi   ini mungkin yang paling mudah dipahami. L2S tidak   memiliki kemampuan untuk menggabungkan data untuk tampilan presentasi.


44
2018-03-23 15:52



Kesan saya adalah bahwa database Anda cukup besar atau sangat buruk dirancang jika Linq2Sql tidak sesuai dengan kebutuhan Anda. Saya memiliki sekitar 10 situs web yang lebih besar dan lebih besar semua menggunakan Linq2Sql. Saya telah melihat dan kerangka Entitas berkali-kali tetapi saya tidak dapat menemukan alasan yang baik untuk menggunakannya di atas Linq2Sql. Yang mengatakan saya mencoba menggunakan database saya sebagai model jadi saya sudah memiliki pemetaan 1 banding 1 antara model dan basis data.

Pada pekerjaan saya saat ini kami memiliki database dengan 200+ tabel. Database lama dengan banyak solusi buruk sehingga saya dapat melihat manfaat Kerangka Entitas atas Linq2Sql tapi tetap saya lebih memilih untuk mendesain ulang database karena database adalah mesin aplikasi dan jika database dirancang dengan buruk dan lambat maka aplikasi saya juga akan lambat. Menggunakan kerangka Entitas pada database seperti itu tampak seperti sebuah perbaikan cepat untuk menyamarkan model buruk tetapi tidak pernah bisa menyamarkan kinerja buruk yang Anda dapatkan dari database semacam itu.


34
2017-11-21 19:52



Anda dapat menemukan perbandingan yang bagus di sini:

enter image description here

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


21
2017-08-31 20:07



Jawaban di sini telah mencakup banyak perbedaan antara Linq2Sql dan EF, tetapi ada titik kunci yang belum diberikan banyak perhatian: Linq2Sql hanya mendukung SQL Server sedangkan EF memiliki penyedia untuk RDBMS berikut:

Disediakan oleh Microsoft:

  • Driver ADO.NET untuk SQL Server, OBDC dan OLE DB

Melalui penyedia pihak ketiga:

  • MySQL
  • Peramal
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Informix
  • U2
  • Sybase
  • Synergex
  • Firebird
  • Npgsql

untuk beberapa nama.

Hal ini menjadikan EF sebagai abstraksi pemrograman yang kuat atas penyimpanan data relasional Anda, yang berarti pengembang memiliki model pemrograman yang konsisten untuk bekerja tanpa memperhatikan penyimpanan data yang mendasarinya. Ini bisa sangat berguna dalam situasi di mana Anda mengembangkan produk yang ingin Anda pastikan akan berinteroperasi dengan berbagai RDBMS umum.

Situasi lain di mana abstraksi itu berguna adalah di mana Anda adalah 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, mereka harus menjadi akrab dengan untuk mendukung berbagai aplikasi yang berbeda di atas RDBMS yang berbeda.


19
2018-03-17 03:19



Saya menemukan bahwa saya tidak dapat menggunakan banyak basis data dalam model basis data yang sama saat menggunakan EF. Tetapi di linq2sql saya hanya bisa dengan awalan nama skema dengan nama database.

Ini adalah salah satu alasan mengapa saya mulai bekerja dengan linq2sql. Saya tidak tahu apakah EF belum mengizinkan fungsi ini, tetapi saya ingat pernah membaca bahwa itu dimaksudkan agar tidak memperbolehkan ini.


14
2018-02-17 15:36