Entity Framework vs LINQ ke SQL

828

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?

Chris Roberts
sumber
138
Saya pikir jawaban di bawah ini harus diperiksa ulang karena sudah lama sejak EF dirilis, sehingga pengembang baru yang datang ke sini bisa mendapatkan kesan yang salah. EF menjadi alat yang HEBAT dan MUDAH sejak rilis awal. Anda baru saja mengatur koneksi ke DB dan itu jenis 90% dari semua yang Anda butuhkan. Perkembangan yang sangat cepat, dari sudut pandang yang berpengalaman! Dari sana - LINQ adalah teman terbaik Anda. Ini sangat dapat dikustomisasi, MVC menyukainya, dan untuk orang-orang yang mengatakan itu buruk - Pelajari cara menggunakannya terlebih dahulu (dan dapatkan juga LINQ)!
graumanoz
10
Sederhananya jelas - tidak seperti Anda memiliki pilihan sekarang - MSFT secara efektif membunuh LINQ2SQL demi EF. Namun, fakta bahwa EF open-source MSFT membantunya untuk mengisap lebih sedikit dan jelas menjadi lebih baik. Tetapi bagi siapa pun yang masuk ke EF - pastikan untuk memahami bahwa masih ada banyak kebiasaan di EF. Saya telah memposting tentang satu - stackoverflow.com/questions/305092/…
nikib3ro
4
@ kape123, (a) LINQ to SQL tidak "mati"; masih bisa digunakan; (B) LINQ ke SQL adalah metode akses data standar dalam pengembangan Windows Phone 8.
Ryan Lundy
9
@ user3308043, [rujukan?].
Ryan Lundy
3
@Kyralessa - Pada 2010 (dengan rilis .NET4.0, kutipan paling baru yang bisa saya temukan), MS mengakui bahwa , sementara beberapa investasi dapat dilakukan dalam LINQ2SQL, "sebagian besar investasi keseluruhan kami akan berada di Entity Kerangka."
kmote

Jawaban:

483

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

Keris
sumber
sepertinya Anda menggunakan LINQ ke SQL untuk kueri di EF
PositiveGuy
11
@CoffeeAddict sementara mereka sangat mirip dalam gaya menggunakan LINQ lambdas, masing-masing API memiliki dasar-dasar yang sangat berbeda. Misalnya cara LINQ2SQL menghasilkan query SQL memungkinkan untuk menggunakan fungsi SQL, sedangkan L2E tidak, atau setidaknya tidak pada 2008.
Kris
2
Pendekatan berorientasi objek EF membuatnya sangat mudah dan nyaman untuk digunakan, dapat dikodekan dengan sangat cepat, terkelola. Bagi saya, cara terbaik untuk mengakses data.
Antoine Pelletier
10
Jawaban ini sudah usang. Sekarang Linq to SQL mendukung pemetaan one2many
George Lanetz
201

Saya pikir jawaban cepat dan kotor adalah itu

  • LINQ to SQL adalah cara cepat dan mudah untuk melakukannya. Ini berarti Anda akan pergi lebih cepat, dan memberikan lebih cepat jika Anda mengerjakan sesuatu yang lebih kecil.
  • Entity Framework adalah cara all-out, no-hold-barred untuk melakukannya. Ini berarti Anda akan membutuhkan lebih banyak waktu di muka, berkembang lebih lambat, dan memiliki lebih banyak fleksibilitas jika Anda mengerjakan sesuatu yang lebih besar.
Brad Tutterow
sumber
32
Anda juga akan cenderung menulis lebih sedikit baris kode dengan L2S untuk mencapai hal yang sama dengan EF. Tidak ada pemuatan malas di EF berarti Anda selalu memeriksa apakah ada sesuatu yang dimuat atau tidak.
Paul Mendoza
Brad, apa yang akan Anda sarankan untuk situs e-commerce? Maksudku, aku tidak bisa melihat apa pun selain CRUD sederhana yang terjadi di sana ...
PositiveGuy
2
@CoffeeAddict jelas, 3 teratas jawaban yang paling banyak memilih mengatakan L2S untuk CRUD sederhana
IsmailS
11
@ Banford Dengan EF di .NET 4.0 Saya pikir itu lebih baik daripada L2S. Fitur yang hilang dari EF dalam 3.5 L2S telah ditambahkan ke EF di .NET 4.0. Pernyataan LINQ Anda sekarang di EF di .NET 4.0 akan terlihat hampir sama dengan yang ada di L2S. EF memberi Anda beberapa hal tambahan yang dapat Anda lakukan sekarang di atas apa yang ditawarkan L2S.
Paul Mendoza
40
Jawaban ini sekarang berusia 5 tahun dan cukup usang. Entity Framework 6 sekarang dalam Beta dan jauh lebih baik, termasuk pemuatan Malas, dukungan enum, dll, dll.
Tim
109

Apakah LINQ ke SQL Benar-Benar Mati? oleh Jonathan Allen untuk InfoQ.com

Matt Warren menggambarkan [LINQ to SQL] sebagai sesuatu yang "bahkan tidak pernah ada." Pada dasarnya, itu hanya diharapkan untuk membantu mereka mengembangkan LINQ sampai ORM yang sebenarnya siap.

...

Skala Kerangka Entitas menyebabkannya melewatkan batas waktu .NET 3.5 / Visual Studio 2008. Itu selesai pada waktunya untuk sayangnya bernama ".NET 3.5 Paket Layanan 1", yang lebih seperti rilis utama daripada paket layanan.

...

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

...

pada. NET 4.0, LINQ untuk Entitas akan menjadi solusi akses data yang direkomendasikan untuk LINQ ke skenario relasional.

Zack Peterson
sumber
56
Sebenarnya, kami tidak suka EF karena memiliki desainer yang buruk dan sangat, sangat buggy. Saya tidak pernah menemukan itu sebagai yang kompleks.
BlueRaja - Danny Pflughoeft
12
BANYAK situs e-commerce utama menggunakan LINQ untuk SQL. Contoh: Redbox, Stackoverflow, dll.
PositiveGuy
14
Saya tahu BANYAK pengembang yang baik yang menggunakan LINQ untuk SQL dan mengatakan artikel ini benar-benar berlebihan. Saya setuju. LINQ to SQL telah digunakan dalam .com yang kuat dan masih.
PositiveGuy
4
Yap, memanggil .ToString () pada properti integer dalam permintaan L2EF seharusnya tidak menyebabkan pengecualian.
StingyJack
3
@ BlueRaja-DannyPflughoeft Apakah masih benar setelah lebih dari 5 tahun?
Vikas Rana
94

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

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

Premis aslinya adalah L2S untuk Rapid Development, dan EF untuk aplikasi n-tier lebih "enterprisey", tetapi menjual L2S sedikit pendek.

James Sugrue
sumber
13
Kutipan Anda "L2S hanya akan bekerja dengan SQL Server (sejauh yang saya tahu)" perlu memperbarui: proyek sumber terbuka "dblinq" menggantikan perakitan LINQ ke SQL dengan yang dapat berbicara dengan MySQL, PostgreSQL, Ingres, Firebird, SQLite. .. dan Microsoft SQL (tentu saja).
Contango
1
tunggu ... jadi EF tidak membuat objek DL yang erat?
PositiveGuy
7
ya premis asli bahwa L2S bukan solusi yang mampu perusahaan tidak lagi benar. Maksud saya StackOverflow berjalan pada L2S dan banyak .com lainnya seperti Redbox, dan banyak lagi.
PositiveGuy
74

LINQ ke SQL

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

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 kompilasi ulang saat mengatur model dan memetakan file Proses Artefak Metadata untuk Menyalin Ke Direktori Output
  4. .edmx (Model Data Entitas) yang berisi:
    • SSDL (Bahasa Definisi Skema Penyimpanan)
    • CSDL (Bahasa Definisi Skema Konseptual)
    • MSL (Bahasa Spesifikasi Pemetaan)
  5. Pemetaan satu-ke-satu, satu-ke-banyak, banyak-ke-satu antara tabel dan kelas
  6. Mendukung warisan:
    • TPH (Tabel Per Hirarki)
    • TPT (Tabel Per Jenis)
    • TPC (Table Per Concrete Class)
  7. Mendukung tipe yang kompleks
  8. Pendekatan kode-pertama, Model-pertama, Penyimpanan-pertama
  9. Tampilan aplikasi-sentris dari database
  10. Dibuat oleh tim SQL Server
  11. API Data Microsoft Masa Depan

Lihat juga:

Ryszard Dżegan
sumber
6
Ini adalah jawaban terkini dan terinci.
ErTR
2
Bukankah Entity Framework menggunakan LINQ untuk SQL ketika, katakanlah, Anda sedang menulis dbSet<Orders>.Where()...ToList()? Saya pikir itu menyesatkan untuk memiliki Entity Framework yang ditentang dari LINQ ke SQL.
Don Cheadle
4
@mmcrae EF tidak menggunakan L2S, keduanya adalah linq-provider untuk database yang mendasarinya. Jika Anda mengartikannya sebagai Linq-to-a-database, mirip dengan linq-to-objek dan linq-to-xml, maka ya, keduanya serupa dalam linq-to-a-database. Tapi tidak, EF tidak menggunakan L2S (atau sebaliknya). Dua alat yang sepenuhnya terpisah.
Maarten
4
"Disarankan untuk semua proyek baru kecuali ... yang kecil" Saya tidak setuju. Code First adalah cara yang sangat cepat untuk memulai dengan proyek-proyek kecil. Selain itu, pembaruan yang bagus untuk pertanyaan ini.
DrewJordan
51

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

Jiyosub
sumber
7
Kurangnya dukungan POCO adalah alasan nomor satu saya memilih LINQ untuk SQL daripada Kerangka Entitas. Saya dapat mengunjungi kembali EF ketika mereka memasukkannya dalam versi berikutnya, seperti yang mereka janjikan. Ada beberapa proyek tambahan di luar sana yang melakukan POCO untuk EF, tetapi tidak cukup bersih.
Joseph Ferris
27
Dalam kasus seseorang (seperti saya) tidak tahu apa kepanjangan POCO: Obyek Old CLR
Biasa
4
Saya benar-benar tidak melihat apa yang menjadi masalah besar tentang tidak mendukung POCO adalah ... itu satu tingkat lagi abstraksi kalian. Buat pabrik, suntikkan repositori data dan buat POCO Anda di sana. Mungkin itu ide yang bagus.
EightyOne Unite
3
Saya mendengar POCO dimungkinkan di EF 4
PositiveGuy
8
Dukungan POCO tersedia hari ini dan pewarisan tidak lagi menjadi persyaratan untuk kelas entitas @CoffeeAddict POCO hanyalah objek sederhana tanpa ketergantungan pada kerangka kerja tertentu dan merupakan bagian utama dari pola kerangka entitas modern
Chris McGrath
46

Saya menemukan jawaban yang sangat baik di sini yang menjelaskan kapan harus menggunakan apa yang dalam kata-kata sederhana:

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

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

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

Dengan Entity Framework Anda dapat "menggabungkan" data yang telah ditabletkan bersama untuk disajikan 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 untuk dipahami. L2S tidak memiliki kemampuan untuk menggabungkan data untuk tampilan presentasi.

Nawaz
sumber
36

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.

terjetyl
sumber
1
Poin Anda hilang - bahkan dengan basis data kecil, Anda mungkin menginginkan sesuatu yang berbeda dari hubungan 1: 1 antara tabel basis data dan objek kode / domain. Hanya tergantung pada berapa banyak abstraksi yang Anda inginkan dalam objek bus / domain.
alkimia
18
Saya menyadari itu :) Hari ini saya suka membuat kode tangan entitas bisnis saya. Saya masih menggunakan Linq2sql tetapi hanya di dalam repositori saya di mana saya mendapatkan data menggunakan Linq2sql dan mengubah entitas linq2sql menjadi entitas bisnis kustom saya. Mungkin sedikit lebih banyak pekerjaan daripada menggunakan or-mapper tetapi masih saya ingin menjaga lapisan bisnis saya bebas dari kode spesifik OR-mapper.
terjetyl
25

Anda dapat menemukan perbandingan yang bagus di sini:

masukkan deskripsi gambar 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

Omer K
sumber
2
Beberapa hal dalam jawabannya tidak benar. EDMX tidak diperlukan jika Anda menggunakan Code First. Dan saya tidak mengerti bagaimana DI berperan ketika Anda menggunakan Code First.
Maarten
1
Juga, Linq to SQL dapat mengisi DB dari kelas model dengan baik. Tidak yakin apakah itu juga dapat menghasilkan DB itu sendiri, tetapi menghasilkan skema dan tabel jatuh dalam kemampuan SQL.
Tom Lint
Terima kasih atas jawabannya, saya pikir orang dapat menggunakan sqlmetal.exe docs.microsoft.com/en-us/dotnet/framework/tools/… untuk menghasilkan kode / pemetaan dari database saat menggunakanLinq to SQL
Vinod Srivastav
23

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:

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

Melalui penyedia pihak ketiga:

  • MySQL
  • Peramal
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Informix
  • U2
  • Sybase
  • Sinergeks
  • Burung api
  • Npgsql

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.

berlayar
sumber
15

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.

Banford
sumber
12

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.

vintana
sumber
4
Entity Framework memungkinkan untuk lapisan abstraksi atas database. Masalah dengan banyak ATAU Pemetaan saat ini (menurut saya) adalah bahwa mereka menyediakan pemetaan 1 ke 1 antara tabel dan kelas. Model database tidak selalu mencerminkan cara kita berpikir tentang hal itu dalam model bisnis.
senfo
Kehabisan ruang. Bagaimanapun, berdasarkan apa yang saya katakan di atas, saya berpendapat bahwa jawaban Anda tidak lengkap.
senfo
7
Saya pikir ini saran yang sangat buruk. L2S baik terlepas dari kesederhanaan atau kompleksitas basis data Anda. Jebakan yang sebenarnya adalah tidak memiliki pemisahan keprihatinan yang tepat. Jika Anda mencoba untuk menggabungkan lapisan bisnis Anda dan lapisan akses data Anda, dan menggunakan objek Linqed up Anda untuk semuanya, maka Anda akan menemukan pembatas L2S. Tapi itu masalah dengan desain yang terlalu sederhana dan monolitik. L2S membuat DAL yang luar biasa, dan jika Anda menganggap pertanyaan dan ketekunan sebagai perhatian terpisah dari aturan bisnis Anda, Anda akan menghemat banyak masalah di banyak area dalam jangka panjang.
mattmc3
1
ini tidak memberitahuku apa-apa. Apa yang sederhana dalam istilah Anda?
PositiveGuy
1
dan apa yang Anda maksud sebagai contoh untuk kebutuhan "logis / abstrak". Ya, saya tahu apa itu abstraksi, tetapi sebuah contoh dalam konteks Anda, mohon ... untuk menjelaskan dengan tepat apa yang Anda katakan ... jelaskan, jangan hanya memberi saya gaul umum ... itu semua relatif terhadap ucapan pembicara kata-kata itu jadi saya tidak tahu apa yang ANDA maksudkan dengan ini.
PositiveGuy
8

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 ...

John Dunagan
sumber
3
SQL Server 2008 Tipe data spasial (Open Geospatial Consortium OGS) didukung pada Entity Framework 5. Penyedia lainnya (Devart untuk Oracle) juga didukung. Lihat msdn.microsoft.com/en-us/data/dn194325 .
subsci
6

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.

MRFerocius
sumber
4
"tidak ada hal-hal aneh di tengah", ok apa maksudmu dengan ini. Contoh "hal aneh di tengah"
PositiveGuy
Akan menyenangkan untuk mengedit atau menghapus jawaban ini, itu tidak lagi berguna untuk perkembangan modern dan dapat membuat orang di jalur yang salah.
Giulio Caccin
6

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).

Ramon de Klein
sumber
2

Linq-to-SQL

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.

Linq-to-Entities

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

Menurut pengalaman pribadi saya, Ef lebih baik (jika Anda tidak tahu tentang SQL) kinerja di LINQ sedikit lebih cepat dibandingkan dengan alasan EF bahasa LINQ ditulis dalam lambda.

Umang Patwa
sumber