實體框架核心RC2表名稱複數

c# entity-framework-core pluralize tablename

有沒有辦法在EF Core RC 2中執行此代碼?

protected override void OnModelCreating(ModelBuilder modelBuilder)
{    
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

熱門答案

EF RC2版本沒有這個慣例。這是來自EF Core團隊:

在過去的EF Core預發行版中,實體的表名與實體類名相同。在RC2中,我們現在使用DbSet屬性的名稱。如果沒有為給定的實體類型定義DbSet屬性,則使用實體類名稱。


現在,如果您想恢復到表的RC1命名約定,您有3種方法可以使用:


1.為DbSet屬性選擇奇異名稱:

一種方法是單獨化你的DbSet屬性名稱(我不喜歡)。比如說你有一個Book實體,並且想要映射到Book表:

public DbSet<Book> Book { get; set; }


2.使用ToTable()Fluent API:

當然,您總是可以使用流暢的API來覆蓋任何適當的約定,並根據您的需要指定表名:

modelBuilder.Entity<Book>().ToTable("Book");


3.編寫自定義公約:

僅僅因為EF Core RC2沒有這方面的約定,這並不意味著我們不能自己編寫。為此,首先我們需要在ModelBuilder像上創建一個擴展方法:

using Microsoft.EntityFrameworkCore.Metadata.Internal;

public static class ModelBuilderExtensions 
{
    public static void RemovePluralizingTableNameConvention(this ModelBuilder modelBuilder)
    {
        foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes())
        {
            entity.Relational().TableName = entity.DisplayName();
        }
    }
}

然後我們簡單地從DbContext上的OnModelCreating方法調用它:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.RemovePluralizingTableNameConvention();
}


關閉時:

我不喜歡複數表格名稱,我比其他選項更喜歡最後一個選項,並且順其自然。也就是說,這是我的個人意見,其他開發者可能會發現這三種方式中的任何一種都比其他方式更優惠,並選擇與之相配:)



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因