2011-12-19 49 views
0

我首先使用實體​​框架代碼。通常我沒有問題,但是對於我正在使用的數據庫,我一直收到錯誤,它無法在SQL Server數據庫中找到表。這裏是我的課是什麼樣子:爲什麼我的實體框架代碼優先多元化不起作用?

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 

public class CustomApp_User 
{ 
    [Key] 
    public int UserID { get; set; } 
    [MaxLength(50)] 
    public string Username { get; set; } 
    [MaxLength(250)] 
    public string Email { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateModified { get; set; } 

} 

在數據庫中我有一個名爲「CustomApp_Users」表以匹配上面。注意它最後有「s」。

然後我有:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Data.Entity; 

public class CustomAppDB : DbContext 
{ 
    public DbSet<CustomApp_User> CustomApp_Users { get; set; } 
} 

我預計EF codefirst變複數,以便它在數據庫中找到「CustomApp_Users」,因爲這是怎麼了通常工作。但相反,我得到的錯誤:

無效的對象名稱'dbo.CustomApp_User'。

它似乎並沒有多元化表名。我無法弄清楚爲什麼。與此數據庫不同的是,主鍵不遵循常規約定,所以我使用[Key]註釋。

我知道,如果我使用[表]註釋爲我的課,將工作: 表(「CustomApp_Users」)

但是,我想找出爲什麼多元化不按照我認爲的方式工作。

回答

2

這是因爲EF中的PluralizationService無法將其複數化。如果將它傳遞給「CustomApp_User」,它將返回相同的字符串。很遺憾,您無法自定義此服務。所以你需要明確配置表名。

+0

謝謝。我不知道我們可以調用PluralizationService。看起來如果表名中有一個下劃線,那麼它不會複數化它。如果我把下劃線取出來,它就是複數形式。我想知道他們爲什麼這麼做? – dtc 2011-12-20 03:17:39

+0

@metanaito可能是因爲在類名中使用'_'標記不是一個好習慣。 – Eranga 2011-12-20 06:53:58

+0

我從來沒有聽說過。我想知道,也許我應該改變我的「CustomApp_User」命名爲「CustomAppUser」,只是爲了使所有內容保持一致並一起工作。這也將解決我的多元化問題,儘管我喜歡明確定義表名。不太確定這個命名是否會導致某處的混亂。 – dtc 2011-12-20 18:46:46

相關問題