6

生成數據庫名稱我有EF一些模型和表格,你可以看到那些在這裏之一:EF以複數表的從模型

Option model

現在,當我想它增加了「以生成模型數據庫s'來在生成的SQL表的名稱:

CREATE TABLE [dbo].[Options] (
[Id] int IDENTITY(1,1) NOT NULL, 
[Name] nvarchar(50) NOT NULL, 
[Price] int NOT NULL 
); 

我的名字也因爲這,但沒有禁用的複數化改變:

enter image description here

這會導致部署Web應用程序時出錯。我怎樣才能防止複數?

+1

見EDMX文件的選項(F4):自動變複數。 – abatishchev

+0

@abatishchev我無法在VS 2010中找到edmx選項。 –

+0

@abatishchev我禁用了它,但是又出現了同樣的問題 –

回答

4

只需重寫OnModelCreating方法並刪除「PluralizingTableNameConvention」約定。所以,你告訴實體框架不pluralise表名,只需添加

更新

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

它會刪除Pluralising約定默認情況下安裝到所有的模型建設者

還需要添加命名空間

System.Data.Entity.ModelConfiguration.Conventions; 

希望這將有助於

+0

不起作用!當我添加'namespace'時,它不會識別'DbModelBuilder'。 –

+0

您需要確保將項目中的引用添加到MSDN鏈接中列出的程序集。程序集是Microsoft.Data.Scheme.dll/Microsoft.Data.Schema.SchemaModel ..我可以知道你使用的EF版本嗎? – Microtechie

+0

我正在使用VS2010,但我不知道EF的哪個版本。我可以知道它嗎? –

-3

原因是:

您在數據庫中創建的任何表,實體框架將其轉換爲類,以便您可以輕鬆地創建對象。

只需在後面的代碼中驗證表單爲單數(就像EF定義的那樣)。

小心! (不要在你的應用程序中爲你的表中的任何頁面命名,因爲它們都被轉換爲類,當你調用表時,它將在表和頁面之間丟失)。

+0

它說,不存在的上下文 –

+0

它發生在我有當我有以前的版本的Visual Studio,你可以嘗試像(ContextName.TableName)這樣的東西來引用表 –

0

似乎可以使用Code First僅禁用多元化功能。 這就是爲什麼下面的代碼不工作:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

試試這個,也許幸運的話:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Option>().ToTable("Option") 
} 

如果你需要知道你正在使用實體框架的版本,有幾種方法:

  • 在您的項目樹exapand「References」並按F4鍵「EntityFramework」。
  • 右鍵單擊您的項目並選擇「管理NuGet包...」,從這裏您可以檢查版本並更新它。
1

您應取消打勾變複數時,要創建文件EDMX enter image description here