2012-10-17 88 views
0

我有一個項目使用EF代碼第一。它也使用表單身份驗證。直到最近,會員數據庫和應用程序數據庫都是單獨開發的,但爲了簡單起見,我想將它們合併到一個數據庫中。EF代碼第一個表命名問題

我的代碼第一個模型中的一個類叫做「Application」,所以EF生成的表被稱爲「應用程序」,它與同名的成員表衝突。這是我目前的情況下的一個例子:

public partial class ExampleContext : DbContext 
{ 
    public DbSet<Application> Applications { get; set; } 
    public DbSet<Status> StatusTypes { get; set; } // notice the name of the property vs the name of the class 
} 

我認爲表名是根據上下文中的屬性的名稱,因爲它產生了一個名爲StatusTypes所有Status對象的表。但是,如果我將Applications屬性重命名爲MyApplications之類的內容,它仍然會生成一個名爲Applications的表。很顯然,這不僅是財產的名稱,而且我錯過了一些東西。

我的問題:我如何讓EF以不同的方式命名此表?

+0

您使用的是網站項目還是Web應用程序項目?網站項目通常會遇到這些問題,因爲它們不使用名稱空間來區分命名範圍。 –

+0

該應用程序的前端是一個MVC項目。但是所有的實體框架和其他數據庫操作都在一個單獨的類庫中。爲什麼要成爲一個Web應用程序導致EF命名不同?這對我來說沒有意義。 – jebar8

+0

namespace .. not name。命名空間提供了名稱有效的「範圍」。 –

回答

0

我剛剛重命名的類,它的工作。現在最簡單的解決方案。

1

你不能使用配置類做這樣的事情:

public class ApplicationConfiguration : EntityTypeConfiguration<Application> 
{ 
    public ClientConfiguration() 
    { 
     ToTable("SpecialApplication"); 
    } 
} 

然後在上下文覆蓋OnModelCreating:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Configurations.Add(new ApplicationConfiguration()); 
    } 

這應該然後強迫你的表被命名爲SpecialApplication和避免衝突

0

默認情況下,實體框架代碼在從模型類構建數據庫時首先會爲表生成複數名稱。您可以覆蓋您的db上下文類的OnModelCreating方法爲該表指定一個不同的名稱。

public class YourDBCOntext:DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    modelBuilder.Entity<Applications>().ToTable("MYApplications"); 
    }  
} 

您也可以在全局範圍內執行此操作,以便任何表都不會有複數名稱。

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