首頁  >  文章  >  資料庫  >  當我的模型需要單數名稱時,為什麼實體框架會在 MySQL 中使用複數表名稱?

當我的模型需要單數名稱時,為什麼實體框架會在 MySQL 中使用複數表名稱?

DDD
DDD原創
2024-10-29 09:25:30268瀏覽

Why Does Entity Framework Pluralize Table Names in MySQL When My Model Expects a Singular Name?

實體框架表名稱複數差異

實體框架 (EF) 旨在根據模型類名稱表示單一實體的約定自動對錶名稱進行複數化。但是,在某些情況下,您可能會遇到差異,EF 建立複數表名稱,而模型或視圖需要單數名稱。

問題:

提供的程式碼定義了一個名為 Vote 的模型,並期望 MySQL 中有一個名為「vote」的表。但是,EF 而是建立了一個名為「votes」的表。嘗試從檢視存取表時,發生異常,指示「投票」表不存在。

可能的原因:

MySQL .NET 連接器可能不完全支援 EF 的表名複數約定。

解決方案:

要解決此問題,您可以在 EF 中自訂表名複數行為。步驟如下:

1.自訂 OnModelCreating 方法:

在 DbContext 類別中,重寫 OnModelCreating 方法並停用 PluralizingTableNameConvention。

<code class="csharp">protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}</code>

2.刪除初始資料庫建立:

實體框架初始化程序可用於建立和初始化資料庫。但是,MySQL 的 .NET Connector 可能不允許 EF 建立資料庫。為了防止此問題,請確保資料庫在 EF 嘗試建立資料庫之前存在。

<code class="csharp">// Remove database creation initializer
// Database.SetInitializer(new DropCreateDatabaseAlways<myDB>());</code>

3.停止基本模型建立呼叫:

確保不呼叫OnModelCreating 的基本實現,因為它可能會覆蓋您的自訂並重新啟用表名複數。

<code class="csharp">// Don't call the base implementation
// base.OnModelCreating(modelBuilder);</code>

4。如果不存在則建立資料庫:

如果資料庫不存在,請手動建立。這樣可以確保 EF 可以使用正確的表名,而不會遇到缺少表的異常。

其他提示:

  • 使用 [Table] 屬性明確指定如有必要,表名。
  • 考慮使用完全支援 EF 的表名約定的不同資料庫提供者。

按照以下步驟,您應該能夠解決表名複數問題差異問題並成功存取您視圖中的「投票」表。

以上是當我的模型需要單數名稱時,為什麼實體框架會在 MySQL 中使用複數表名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn