如何在Entity Framework Core中使用多個DbSet屬性名稱來構建DbContext?

c# entity-framework entity-framework-core sql-server visual-studio-2015

我在Package Manager Console使用Scaffold-DbContext命令為現有的SQL Server數據庫創建和重新創建上下文和實體:

Scaffold-DbContext -provider EntityFramework.MicrosoftSqlServer -connection "my connection string"

它完美地工作除了一件事: DbSet有單數形式的屬性名稱:

Scaffold-DbContext -provider EntityFramework.MicrosoftSqlServer -connection "my connection string"

我更喜歡這些名稱是複數形式( Requests等)。除了網頁搜索,我檢查了命令語法:

Scaffold-DbContext -provider EntityFramework.MicrosoftSqlServer -connection "my connection string"

並沒有發現改變這種行為。這是我的packages.config

Scaffold-DbContext -provider EntityFramework.MicrosoftSqlServer -connection "my connection string"

腳手架時如何復數DbSet名稱?

更新2017-04: DB現在可以在Entity Framework Core 1.1中實現第一個腳手架複數化。請閱讀下面的答案了解詳情。

一般承認的答案

從RC1開始,EF7不支持多元化。 EF7腳手架的這個和其他限制在這裡被跟踪: https//github.com/aspnet/EntityFramework/issues/4038


熱門答案

在EF Core 1.1中可以實現多元化。正如Rowan Miller 在其博客中所描述的那樣 ,您需要安裝Inflector並實現IDesignTimeServices來控制腳手架時的複數化。但請注意:

我們將這些服務放入* .internal命名空間,並保留隨時中斷API的權利。

所以這就是為什麼沒有將完整的代碼示例複製到此處。出於同樣的原因,不接受這個答案 - 我寧願等到我們得到一個穩定的API。

您應該考慮的另一個問題 - 此解決方案依賴於提供程序。它適用於SQL Server(我測試過它)。另一個DBMS提供程序可能尚不支持此API。例如,當使用自定義IDesignTimeServices時,最新的Npgsql.EntityFrameworkCore.PostgreSQL 1.1.0在scaffold上失敗。




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