2013-10-22 58 views
0

我有以下問題: 我的用戶類包含一個排名字段。如何定義Rank,因此它的行爲就像枚舉類型,但是在數據庫上,首先使用代碼:S(不知道該怎麼說)。如何... codefirst中的簡單enumlike類型?

這是我的用戶等級:

public class User 
{ 
    [Key] 
    [Required] 
    [StringLength(30, MinimumLength = 3)] 
    public String Name { get; set; } 

    [EmailAddress] 
    [MaxLength(254)] 
    public String Email { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    public String Password { get; set; } 

    public String Salt { get; set; } 

    //[DataType(DataType.ImageUrl)] 
    public String Avatar { get; set; } 

    public bool Banned { get; set; } 

    public Rank Rank { get; set; } 

    public String Information { get; set; } 
} 

而且這是我第一次嘗試:

public class Rank 
{ 
    [Key] 
    public int RankId { get; set; } 

    [Required] 
    [StringLength(50)] 
    public String Name { get; set; } 
} 

它的工作原理,當我添加:

[ForeignKey("RankId")] 
public Rank Rank { get; set; } 
public int RankId { get; set; } 

但我一直告訴說在那裏使用int RnakId是浪費和字段名稱就夠了...我想要我的排名包含他們的排名的字符串 - 例如:admin,user,mod。所以我以後可以選擇一些已經定義的等級,而不是輸入它的時間。 你知道其他方法嗎?

回答

1

您可以在代碼中的枚舉之間來回解析它,但這需要代碼編輯並重新編譯以添加新的等級。

你不能擺脫id字段,因爲它是外鍵所需要的。 該id在ui中的組合框中存儲時很有用。

+0

什麼時候我做'public String Name {get;組; }'a'[Key]'? – Kmaczek

+0

然後不需要單獨的表 –

+0

不知道上下文。那麼我認爲你已經擁有的解決方案是最好的。 有時當我需要「枚舉」功能時,我會在名爲「SYSTEM_KEY」的Rank中創建另一個字段,其中我將存儲一些字符串用於比較應用程序內部。 通過這種方式,您可以靈活地重新命名級別並添加新級別而無需更改應用程序。當然,如果你需要新的行爲,你需要改變應用程序,並尋找另一個「SYSTEM_KEY」 –