Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
- penyedia Azure Cosmos DB harus menetapkan secara default kepemilikan implisit
- Atur kunci partisi pada jenis entitas gabungan menurut konvensi
- Dukungan untuk FromSql
- Mengonfigurasi TTL per entitas/jenis entitas/ pengumpulan
- API untuk mengonfigurasi faset kontainer (throughput, ukuran, kunci partisi, dll.)
- Peristiwa diagnostik termasuk statistik (biaya kueri, id aktivitas)
- operator Berbeda dalam kueri
- Menambahkan penerjemah untuk anggota/metode yang memetakan ke fungsi bawaan
- Menambahkan dukungan dasar untuk koleksi dan kamus jenis primitif
Pembaruan: Masalah berikut dipotong dari rilis 6.0:
- Find/FindAsync melakukan kueri SQL API saat entitas memiliki entitas yang disematkan
- Mengoptimalkan lebih banyak kueri yang dapat menggunakan ReadItem
- Mendeteksi filter kunci partisi pada lebih banyak kueri
- Terjemahkan subkueri dalam kondisi filter
- Izinkan untuk menentukan tingkat konsistensi untuk operasi CUD
- Mendukung operator agregat
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:
- Kueri terpisah untuk kumpulan non-navigasi
- Mendeteksi tabel gabungan sederhana dalam rekayasa terbalik dan membuat hubungan banyak ke banyak
- Mekanisme/API untuk menentukan konversi default untuk properti apa pun dari jenis tertentu dalam model
Pembaruan: Masalah berikut dipotong dari rilis 6.0:
- Selesaikan pencarian teks lengkap dan bebas di SQLite dan SQL Server
- Indeks Spatial SQL Server
- Menggunakan API batching baru dari ADO.NET
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.