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」)
但是,我想找出爲什麼多元化不按照我認爲的方式工作。
謝謝。我不知道我們可以調用PluralizationService。看起來如果表名中有一個下劃線,那麼它不會複數化它。如果我把下劃線取出來,它就是複數形式。我想知道他們爲什麼這麼做? – dtc 2011-12-20 03:17:39
@metanaito可能是因爲在類名中使用'_'標記不是一個好習慣。 – Eranga 2011-12-20 06:53:58
我從來沒有聽說過。我想知道,也許我應該改變我的「CustomApp_User」命名爲「CustomAppUser」,只是爲了使所有內容保持一致並一起工作。這也將解決我的多元化問題,儘管我喜歡明確定義表名。不太確定這個命名是否會導致某處的混亂。 – dtc 2011-12-20 18:46:46