Di EF6 kami biasanya dapat menggunakan cara ini untuk mengkonfigurasi Entitas.
public class AccountMap : EntityTypeConfiguration<Account>
{
public AccountMap()
{
ToTable("Account");
HasKey(a => a.Id);
Property(a => a.Username).HasMaxLength(50);
Property(a => a.Email).HasMaxLength(255);
Property(a => a.Name).HasMaxLength(255);
}
}
Bagaimana kita bisa melakukannya di EF Core, sejak saat kelas I Mewarisi EntityTypeConfiguration yang tidak dapat menemukan kelas tersebut.
Saya mengunduh kode sumber mentah EF Core dari GitHub, saya tidak dapat menemukannya. Bisakah seseorang membantu dalam hal ini?
c#
entity-framework-core
Herman
sumber
sumber
IEntityTypeConfiguration<T>
adavoid Configure()
metode dengan satu yang dapat Anda terapkan. Rincian di sini: github.com/aspnet/EntityFramework/pull/6989Jawaban:
Sejak EF Core 2.0 ada
IEntityTypeConfiguration<TEntity>
. Anda bisa menggunakannya seperti ini:Lebih lanjut tentang ini dan fitur baru lainnya yang diperkenalkan di 2.0 dapat ditemukan di sini .
sumber
builder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);
itu akan menerapkan semua konfigurasi kustomAnda dapat mencapai ini melalui beberapa jenis tambahan sederhana:
Pemakaian:
sumber
ForSqlServerToTable()
?ToTable
, lihat docs.microsoft.com/en-us/ef/core/modeling/relational/tablesentity.Property(c => c.JoinDate).HasColumnType("date");
OnModelCreating
telah diperbarui untuk membutuhkanDbModelBuilder
. Cara untuk menambahkan konfigurasi ke ini sekarangmodelBuilder.Configurations.Add(new UserConfiguration());
Di EF7, Anda mengganti OnModelCreating pada kelas DbContext yang Anda implementasikan.
sumber
IEntityMapperStrategy
antarmuka denganvoid MapEntity(ModelBuilder, Type)
tanda tangan danbool IsFor(Type)
. Implementasikan antarmuka sebanyak atau sesedikit yang Anda inginkan (sehingga Anda dapat membuat kelas yang dapat memetakan lebih dari satu entitas jika Anda mau) dan kemudian membuat kelas lain (penyedia strategi) yang memasukkan salah satuIEnumerable
dari semuaIEntityMapperStrategies
. Lihat di sini di bawah 'Jenis Khusus'. Masukkan itu ke dalam konteks Anda.Ini menggunakan yang terbaru, beta 8. Coba ini:
Kemudian di DbContext Anda:
sumber
Anda dapat menggunakan refleksi untuk melakukan hal-hal yang sangat mirip dengan cara kerjanya di EF6, dengan kelas pemetaan terpisah untuk setiap entitas. Ini bekerja di final RC1:
Pertama, buat antarmuka untuk jenis pemetaan Anda:
Kemudian buat kelas pemetaan untuk setiap entitas Anda, misalnya untuk
Person
kelas:Sekarang, keajaiban refleksi
OnModelCreating
dalamDbContext
implementasi Anda :sumber
DataContext
dan.Where
digunakan? Saya membuat proyek terpisah untuk ini dan sepertinya tidak menemukan referensi..Where
adalahSystem.Linq
,DataContext
adalah kelas tempat kode ditambahkan (DbContext
impl EF saya )Sejak EF Core 2.2 Anda dapat menambahkan semua konfigurasi (kelas, yang menerapkan antarmuka IEntityTypeConfiguration) dalam satu baris dalam metode OnModelCreating di kelas, yang diwarisi dari kelas DbContext
Dan, seperti yang disebutkan dalam jawaban sebelumnya, sejak EF Core 2.0, Anda dapat mengimplementasikan antarmuka IEntityTypeConfiguration, mengatur konfigurasi pemetaan dengan menggunakan FluentAPI dalam metode Configure.
sumber
Inilah yang saya lakukan dalam proyek yang sedang saya kerjakan.
Pemakaian:
Dalam metode OnModelCreating Konteks Anda:
Contoh kelas pemetaan:
Satu hal lain yang ingin saya lakukan untuk memanfaatkan perilaku pelipatan Visual Studio 2015 adalah untuk Entitas yang disebut 'Pengguna', beri nama file pemetaan Anda 'User.Mapping.cs', Visual Studio akan melipat file di penjelajah solusi sehingga dimuat di bawah file kelas entitas.
sumber
Configure(builder)
tidak ada pada tahun 2016? Dengan sedikit perubahan kabel untuk menunjuk ke TypeConfiguration, tidak perlu antarmuka 'ekstra'.Saya mengakhiri dengan solusi ini:
Penggunaan Sampel:
dan
sumber
Cukup terapkan IEntityTypeConfiguration
dan kemudian menambahkannya ke konteks entitas Anda
sumber
Pada intinya kita harus menerapkan IEntityTypeConfiguration alih-alih EntityTypeConfiguration dalam hal ini kita memiliki akses penuh ke DbContext modelBuilder dan kita dapat menggunakan api yang lancar tetapi pada intinya api ini sedikit berbeda dari versi sebelumnya. Anda dapat menemukan detail lebih lanjut tentang konfigurasi model inti ef di
https://www.learnentityframeworkcore.com/configuration/fluent-api
sumber
Dalam Entity Framework Core 2.0:
Saya mengambil jawaban Cocowalla dan mengadaptasinya untuk v2.0:
Dan itu digunakan dalam DbContext seperti ini:
Dan inilah cara Anda membuat konfigurasi tipe entitas untuk entitas:
sumber
Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.
class EntityTypeConfigurationBase<TEntity> : IEntityTypeConfiguration<TEntity>
). Anda tidak dapat membuat instance dari kelas dasar ini.Apakah saya benar?
I can Pass config:
sumber
Saya mengikuti pendekatan serupa dengan cara Microsoft mengimplementasikan ForSqlServerToTable
menggunakan metode ekstensi ...
yang parsial bendera diperlukan jika Anda ingin menggunakan nama kelas yang sama di beberapa file
Kemudian di DataContext OnModelCreating lakukan panggilan Anda untuk setiap ekstensi ...
Dengan cara ini kami mengikuti pola yang sama yang digunakan oleh metode pembangun lainnya.
Apa yang kamu pikirkan?
sumber
Nah, inilah masalah untuk peningkatan pada repo EF7 Github: https://github.com/aspnet/EntityFramework/issues/2805
Anda bisa langsung melacaknya di sana, meski masih di backlog tanpa prioritas yang ditentukan.
sumber
Saya memiliki proyek yang memungkinkan Anda untuk mengkonfigurasi entitas di luar
DbContext.OnModelCreating
Anda mengkonfigurasi setiap entitas dalam kelas terpisah yang mewarisiStaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration
Pertama, Anda perlu membuat kelas yang mewarisi dari
StaticDotNet.EntityFrameworkCore.ModelConfiguration.EntityTypeConfiguration<TEntity>
manaTEntity
kelas yang ingin Anda konfigurasi.Kemudian di kelas Startup Anda, Anda hanya perlu memberi tahu Entity Framework di mana menemukan semua kelas konfigurasi Anda saat Anda mengonfigurasi DbContext.
Ada juga opsi untuk menambahkan konfigurasi tipe menggunakan penyedia. Repo memiliki dokumentasi lengkap tentang cara menggunakannya.
https://github.com/john-t-white/StaticDotNet.EntityFrameworkCore.ModelConfiguration
sumber