Entity Framework Core’un tablo adları olarak DbSet adları yerine sınıf adlarını kullanmasını sağlama

Womanne

Member
Microsoft Entity Framework Core nesne-ilişki eşleştiricisi, garip bir temel kurulum olduğunu düşündüğüm şeye sahip: veritabanı tabloları, varlık sınıfının sınıf adlarından sonra değil, varlık sınıfında kullanılan özellik adlarından sonra adlandırılır. ilan ederken DbSet kullanılmalı


Yani, sınıf bağlamında bir bildirimi olan bir “eğitim” sınıfı

public class WWWingsContext : DbContext
{
public DbSet<Schulung> SchulungSet { get; set; }
...
}

tablo adı “Training” ancak “TrainingSet” atanmamış. Artık veri ek açıklamasını kullanarak her varlık sınıfı için tablo adını ayrı ayrı ayarlayabilirim [Table(“Schulung”)] Önce sınıf eğitimi akıcı api’de kullanın veya belirtin:

protected override void OnModelCreating(ModelBuilder mb)
{
mb.Entity<Flight>().ToTable("Flight");
...
}

Daha büyük uygulamalarda benim için eğlenceli değil.

Çözüm, tablo adını bir bağlam örneğindeki tüm varlık sınıfları için sınıf adına ayarlayan aşağıdaki toplu yapılandırmadır. Masa[(“Name”)] kullanılır ve sınıfın başka bir sınıftan türetilmediği ölçüde (burada EF Core 3.0’da masa()– daha fazla aramaya izin verilir):

protected override void OnModelCreating(ModelBuilder mb)
{
#region Bulk configuration via model class for all table names
foreach (IMutableEntityType entity in mb.Model.GetEntityTypes())
{
// All table names = class names (~ EF 6.x),
// except the classes that have a
annotation or derived classes (where ToTable() is not allowed in EF Core >= 3.0)
var annotation = entity.ClrType?.GetCustomAttribute<TableAttribute>();
if (annotation == null && entity.BaseType == null)
{
entity.Relational().TableName = entity.DisplayName();
}
}
#endregion
...
}


()





Haberin Sonu
 
Üst