Bagikan melalui


Rencana untuk Entity Framework Core 6.0

Penting

EF Core 6.0 sekarang telah dirilis. Halaman ini tetap sebagai catatan historis rencana.

Seperti yang dijelaskan dalam proses perencanaan , kami telah mengumpulkan input dari pemangku kepentingan ke dalam rencana untuk rilis Entity Framework Core (EF Core) 6.0. Paket ini diperbarui secara berkala untuk mencerminkan penyesuaian jadwal dan cakupan.

Tidak seperti rilis sebelumnya, rencana ini tidak mencoba mencakup semua pekerjaan untuk rilis 6.0. Sebaliknya, ini menunjukkan di mana dan bagaimana kami berniat untuk berinvestasi dalam rilis ini, tetapi dengan fleksibilitas untuk menyesuaikan cakupan atau menarik dalam pekerjaan baru saat kami mengumpulkan umpan balik dan belajar saat mengerjakan rilis.

Penting

Rencana ini bukan komitmen. Ini adalah titik awal yang akan berkembang saat kita mempelajari lebih lanjut. Beberapa hal yang saat ini tidak direncanakan untuk 6.0 dapat dimasukkan. Beberapa rencana yang saat ini direncanakan untuk 6.0 mungkin akan ditunda.

Informasi umum

Nomor versi dan tanggal rilis

EF Core 6.0 adalah rilis berikutnya setelah EF Core 5.0 dan saat ini dijadwalkan untuk rilis pada November 2021 pada saat yang sama dengan .NET 6.

Platform yang didukung

EF Core 6.0 memerlukan .NET 6. EF Core 6.0 tidak menargetkan versi Standar .NET apa pun; untuk informasi selengkapnya, lihat masa depan .NET Standard.

EF Core 6.0 tidak akan berjalan pada .NET Framework.

EF Core 6.0 akan selaras dengan .NET 6 sebagai rilis dukungan jangka panjang (LTS) .

Memutus perubahan

EF Core 6.0 akan berisi sejumlah kecil perubahan melanggar karena kami terus mengembangkan EF Core dan platform .NET. Tujuan kami adalah untuk memungkinkan sebagian besar aplikasi diperbarui tanpa melanggar.

Tema

Area berikut akan membentuk dasar untuk investasi besar di EF Core 6.0.

Fitur yang sangat diminta

Seperti biasa, input utama ke dalam proses perencanaan berasal dari pemungutan suara (👍) untuk fitur di GitHub. Untuk EF Core 6.0, kami berencana untuk mengerjakan fitur yang sangat diminta berikut:

Tabel temporal SQL Server

Dilacak oleh #4693

Status: Selesai

Ukuran kaos: Besar

Tabel temporal mendukung kueri untuk data yang disimpan dalam tabel pada setiap saat, bukan hanya data terbaru yang disimpan seperti pada tabel normal. EF Core 6.0 akan memungkinkan tabel temporal dibuat melalui Migrasi, serta memungkinkan akses ke data melalui kueri LINQ.

Pekerjaan ini awalnya dicakup sebagai yang dijelaskan pada isu. Kami dapat menarik dukungan tambahan berdasarkan umpan balik selama rilis.

Kolom JSON

Dilacak oleh #4021

Status: Terpotong

Ukuran kaos: Sedang

Fitur ini akan memperkenalkan mekanisme dan pola umum untuk dukungan JSON yang dapat diimplementasikan oleh penyedia database apa pun. Kami akan bekerja sama dengan komunitas untuk menyelaraskan implementasi yang ada untuk Npgsql dan Pomelo MySQL, dan juga menambahkan dukungan untuk SQL Server dan SQLite.

ColumnAttribute.Order

Dilacak oleh #10059

Status: Sedang berlangsung

Ukuran kaos: Kecil

Fitur ini akan memungkinkan pengurutan kolom secara arbitrer saat membuat tabel dengan Migrasi atau EnsureCreated. Perhatikan bahwa mengubah urutan kolom dalam tabel yang ada mengharuskan tabel dibangun kembali, dan ini bukan sesuatu yang kami rencanakan untuk didukung dalam rilis EF Core apa pun.

Kinerja

Meskipun EF Core umumnya lebih cepat daripada EF6, masih ada area di mana peningkatan performa yang signifikan dimungkinkan. Kami berencana untuk mengatasi beberapa area ini di EF Core 6.0, sekaligus meningkatkan infrastruktur dan pengujian perf kami.

Tema ini akan melibatkan banyak penyelidikan berulang, yang akan menginformasikan di mana kami memfokuskan sumber daya. Kami berencana untuk memulai dengan:

Infrastruktur performa dan pengujian baru

Status: Cakupan/Lengkap

Ukuran kaos: Menengah

Basis kode EF Core sudah berisi serangkaian tolok ukur performa yang dijalankan setiap hari. Untuk 6.0, kami berencana untuk meningkatkan infrastruktur untuk pengujian ini serta menambahkan pengujian baru. Kami juga akan memprofilkan skenario kinerja utama dan memperbaiki masalah yang mudah ditemukan.

Pembaruan: Kami telah meningkatkan infrastruktur pengujian dan menambahkan pengujian baru untuk mendukung pekerjaan yang dilakukan untuk EF Core 6. Peningkatan tambahan di area ini telah tercakup dari rilis EF Core 6.0.

Model yang dikompilasi

Dilacak oleh #1906

Status: Selesai

Ukuran kaos: Extra Besar

Model yang dikompilasi akan memungkinkan pembuatan bentuk model EF yang dikompilasi. Ini akan memberikan performa startup yang lebih baik, serta kinerja yang lebih baik secara umum saat mengakses model.

TechEmpower Fortunes

Dilacak oleh #23611

Status: Selesai

Ukuran kaos: X-Besar

Kami telah menjalankan standar industri tolok ukur TechEmpower di .NET terhadap database PostgreSQL selama beberapa tahun. Tolok ukur Fortunes sangat relevan dengan skenario EF. Kami memiliki beberapa variasi tolok ukur ini, termasuk:

  • Implementasi yang menggunakan ADO.NET secara langsung. Ini adalah implementasi tercepat dari tiga yang tercantum di sini.
  • Implementasi yang menggunakan Dapper. Ini lebih lambat daripada menggunakan ADO.NET secara langsung, tetapi masih cepat.
  • Implementasi yang menggunakan EF Core. Ini adalah implementasi yang paling lambat dari ketiganya.

Tujuan dari EF Core 6.0 adalah untuk mendapatkan performa EF Core sebanding dengan Dapper pada tolok ukur TechEmpower Fortunes. (Ini adalah tantangan yang signifikan tetapi kami akan melakukan yang terbaik untuk mendekat sedekat mungkin.)

Linker/AOT

Dilacak oleh #10963

Status: Cakupan/Lengkap

Ukuran kaos: Menengah

EF Core melakukan pembuatan kode runtime dalam jumlah besar. Ini menantang untuk model aplikasi yang bergantung pada goyangan pohon linker, seperti .NET MAUI dan Blazor, dan platform yang tidak memungkinkan kompilasi dinamis, seperti iOS. Kami akan terus menyelidiki ruang ini sebagai bagian dari EF Core 6.0 dan melakukan peningkatan yang ditargetkan sebaik mungkin. Namun, kami tidak berharap untuk sepenuhnya menutup kesenjangan dalam jangka waktu 6.0.

Migrasi dan penyebaran

Berdasarkan penyelidikan yang dilakukan untuk EF Core 5.0, kami berencana untuk memperkenalkan dukungan yang ditingkatkan untuk mengelola migrasi dan menerapkan database. Ini termasuk dua area utama:

Bundel migrasi

Dilacak oleh #19693

Status: Selesai

Ukuran T-shirt: Medium

Bundel migrasi adalah executable mandiri yang menerapkan migrasi ke database produksi. Perilaku sesuai dengan dotnet ef database update, tetapi seharusnya membuat penyebaran SSH/Docker/PowerShell jauh lebih mudah, karena semua yang diperlukan terkandung dalam satu eksekutabel.

Mengelola migrasi

Dilacak oleh #22945

Status: Terpotong

Ukuran kaos: Besar

Jumlah migrasi yang dibuat untuk aplikasi dapat tumbuh menjadi beban. Selain itu, migrasi ini sering disebarkan dengan aplikasi bahkan ketika ini tidak diperlukan. Dalam EF Core 6.0, kami berencana untuk meningkatkan ini melalui alat dan manajemen proyek/perakitan yang lebih baik. Dua masalah spesifik yang kami rencanakan untuk diatasi adalah menggabungkan banyak migrasi menjadi satu dan meregenerasi snapshot model yang bersih.

Pembaruan: karena kendala sumber daya, sebagian besar pekerjaan di area ini telah dipotong untuk versi 6.0.

Meningkatkan fitur yang ada dan memperbaiki bug

Setiap masalah atau bug yang ditetapkan ke tonggak pencapaian 6.0.0 saat ini dijadwalkan untuk rilis ini. Ini termasuk banyak peningkatan kecil dan perbaikan bug.

Paritas kueri EF6

Masalah yang dilacak berlabel 'ef6-parity' dan dalam target 6.0

Status: Cakupan/Lengkap

Ukuran kaos: Besar

EF Core 5.0 mendukung sebagian besar pola kueri yang didukung oleh EF6, selain pola yang tidak didukung di EF6. Untuk EF Core 6.0, kami berencana untuk menghilangkan kesenjangan dan membuat kueri EF Core yang didukung menjadi superset sejati dari kueri EF6 yang didukung. Ini akan didorong oleh penyelidikan kesenjangan, tetapi sudah mencakup masalah GroupBy seperti menerjemahkan GroupBy diikuti olehFirstOrDefault , dan kueri SQL mentah untuk primitif dan jenis yang tidak dipetakan.

Pembaruan: Kueri SQL mentah untuk jenis primitif dan tidak dipetakan telah dipotong dari 6.0 karena batasan sumber daya dan penyesuaian prioritas.

Objek nilai

Dilacak oleh #9906

Status: Dihentikan

Ukuran kaos: Menengah

Sebelumnya, pandangan tim adalah bahwa entitas yang dimiliki, yang dimaksudkan untuk mendukung agregat , juga akan menjadi perkiraan yang wajar untuk obyek nilai . Pengalaman telah menunjukkan hal ini tidak terjadi. Oleh karena itu, dalam EF Core 6.0 kami berencana untuk memperkenalkan pengalaman yang lebih baik yang berfokus pada kebutuhan objek nilai dalam desain berbasis domain. Pendekatan ini akan didasarkan pada pengonversi nilai daripada entitas yang dimiliki.

Pekerjaan ini awalnya bertujuan untuk melibatkan pengonversi nilai yang memetakan nilai ke beberapa kolom. Kami dapat menarik dukungan tambahan berdasarkan umpan balik selama rilis.

Penyedia database Azure Cosmos DB

Dilacak oleh masalah berlabel 'area-cosmos' dan dalam tonggak pencapaian 6,0

Status: Diperluas/Selesai

Ukuran kaos: Besar

Kami secara aktif mengumpulkan umpan balik tentang peningkatan yang harus dilakukan pada penyedia Azure Cosmos DB di EF Core 6.0. Kami akan memperbarui dokumen ini saat kami mempelajari lebih lanjut. Untuk saat ini, pastikan untuk memilih (👍) untuk fitur Azure Cosmos DB yang Anda butuhkan.

Pembaruan: Kami telah melakukan pengembangan pelanggan yang luas di sekitar penyedia Azure Cosmos DB. Ini telah mengakibatkan penambahan peningkatan berikut ke dalam EF Core 6.0:

Pembaruan: Masalah berikut dipotong dari rilis 6.0:

Mengekspos konvensi pembuatan model ke aplikasi

Dilacak oleh #214

Status: Potong

Ukuran kaos: Sedang

EF Core menggunakan serangkaian konvensi untuk membangun model dari jenis .NET. Konvensi ini saat ini dikendalikan oleh penyedia database. Dalam EF Core 6.0, kami berniat untuk mengizinkan aplikasi untuk menghubungkan dan mengubah konvensi ini.

Nol bug balance (ZBB)

Masalah yang berlabel type-bug dilacak dalam tonggak pencapaian 6.0

Status: Sedang berlangsung/Terlingkup

Ukuran kaos (t-shirt): Besar

Kami berencana untuk memperbaiki semua bug yang belum diselesaikan dalam jangka waktu pengembangan EF Core 6.0. Beberapa hal yang perlu diingat:

  • Ini secara khusus berlaku untuk masalah berlabel jenis bug.
  • Akan ada pengecualian, seperti ketika bug memerlukan perubahan desain atau fitur baru untuk diperbaiki dengan benar. Masalah ini akan ditandai dengan label blocked.
  • Kami akan menunda penanganan bug berdasarkan risiko ketika diperlukan, seperti biasanya ketika kami mendekati rilis keumuman/produksi (GA/RTM).

Fitur lain-lain

Masalah yang dilacak berlabel type-enhancement dalam tonggak pencapaian 6.0

Status: Selesai

Ukuran kaos: Besar

Fitur lain-lain yang direncanakan untuk EF 6.0 meliputi, tetapi tidak terbatas pada:

Pembaruan: Masalah berikut dipotong dari rilis 6.0:

Integrasi .NET

Tim EF Core juga bekerja pada beberapa teknologi terkait tetapi independen. Secara khusus, kami berencana untuk mengerjakan:

Peningkatan pada System.Data

Dilacak oleh masalah di repositori dotnet\rruntime yang dilabeli dengan area-System.Data dalam tonggak pencapaian 6.0

Status: Cakupan/Lengkap

Ukuran T-shirt: L

Pekerjaan ini mencakup:

  • Implementasi dari API batching baru .
  • Terus bekerja sama dengan tim .NET lainnya dan komunitas untuk memahami dan mengembangkan ADO.NET.

Pembaruan: Masalah berikut dipotong dari rilis 6.0:

Peningkatan pada Microsoft.Data.Sqlite

Dilacak oleh masalah berlabel type-enhancement dan area-adonet-sqlite dalam milestone 6,0

Status: Dalam Cakupan/Selesai

Ukuran kaos: M

Beberapa peningkatan kecil direncanakan untuk Microsoft.Data.Sqlite, termasuk pengumpulan koneksi dan pernyataan yang disiapkan untuk performa.

Pembaruan: Pernyataan yang disiapkan telah dipotong dari rilis 6.0.

Jenis referensi yang dapat bernilai null

Dilacak oleh #14150

Status: Selesai

Ukuran kaos: Besar

Kami akan membuat anotasi kode EF Core untuk menggunakan jenis referensi nullable.

Eksperimen dan investigasi

Tim EF berencana untuk menginvestasikan waktu selama jangka waktu EF Core 6.0 bereksperimen dan menyelidiki di dua area. Ini adalah proses pembelajaran dan dengan demikian tidak ada hasil konkret yang direncanakan untuk rilis 6.0.

SqlServer.Core

Dilacak di repositori .NET Data Lab

Status: Sedang berlangsung

Ukuran kaos: Sedang berlangsung

Microsoft.Data.SqlClient adalah penyedia database ADO.NET berfungsi penuh untuk SQL Server. Ini mendukung berbagai fitur SQL Server pada .NET Core dan .NET Framework. Namun, ini juga merupakan basis kode besar dan lama dengan banyak interaksi kompleks antara perilakunya. Ini menyulitkan untuk menyelidiki potensi keuntungan yang dapat dibuat menggunakan fitur .NET Core yang lebih baru. Oleh karena itu, kami memulai eksperimen bekerja sama dengan komunitas untuk menentukan potensi apa yang ada untuk driver SQL Server dengan performa tinggi untuk .NET.

Penting

Investasi di Microsoft.Data.SqlClient tidak berubah. Ini akan terus menjadi cara yang direkomendasikan untuk terhubung ke SQL Server dan SQL Azure, baik dengan dan tanpa EF Core. Ini akan terus mendukung fitur SQL Server baru saat diperkenalkan.

GraphQL

Status: Sedang berlangsung

Ukuran kaos: Sedang berlangsung

GraphQL telah mendapatkan daya tarik selama beberapa tahun terakhir di berbagai platform. Kami berencana untuk menyelidiki ruang dan menemukan cara untuk meningkatkan pengalaman dengan .NET. Ini akan melibatkan kerja sama dengan masyarakat tentang pemahaman dan mendukung ekosistem yang ada. Ini mungkin juga melibatkan investasi tertentu dari Microsoft, baik dalam bentuk kontribusi untuk pekerjaan yang ada atau dalam mengembangkan komponen pelengkap dalam ekosistem Microsoft.

DataVerse (sebelumnya Common Data Services)

Status: Sedang berlangsung

Ukuran kaos: Sedang berlangsung

DataVerse adalah penyimpanan data berbasis kolom yang dirancang untuk pengembangan aplikasi bisnis yang cepat. Ini secara otomatis menangani jenis data kompleks seperti objek biner (BLOB) dan memiliki entitas dan hubungan bawaan seperti organisasi dan kontak. SDK ada tetapi pengembang mungkin mendapat manfaat dari memiliki penyedia EF Core untuk menggunakan kueri LINQ tingkat lanjut, memanfaatkan unit kerja dan memiliki API akses data yang konsisten. Tim akan mempertimbangkan berbagai cara untuk meningkatkan pengalaman pengembang .NET yang terhubung ke DataVerse.

Di bawah garis potong

Dilacak oleh masalah berlabel consider-for-current-release

Ini adalah perbaikan bug dan peningkatan yang tidak saat ini dijadwalkan untuk rilis 6.0, tetapi kami akan mempertimbangkannya berdasarkan umpan balik selama proses rilis bersama dengan kemajuan yang dibuat pada pekerjaan di atas. Masalah ini dapat ditarik ke EF Core 6.0, dan secara otomatis menjadi kandidat untuk rilis berikutnya.

Selain itu, kami selalu mempertimbangkan isu yang paling banyak mendapat suara saat merencanakan. Menghilangkan salah satu dari masalah-masalah ini dari rilis memang selalu menyakitkan, namun kita memerlukan rencana yang realistis untuk sumber daya yang kita miliki. Pastikan Anda telah memilih (👍) untuk fitur yang Anda butuhkan.

Saran

Umpan balik Anda tentang perencanaan itu penting. Cara terbaik untuk menunjukkan pentingnya masalah adalah dengan memilih (👍) untuk masalah tersebut di GitHub. Data ini kemudian akan masuk ke proses perencanaan untuk rilis berikutnya.