2012-05-16 55 views
0

我有一個名爲'角色','Id'和'RoleName'列的數據庫。 這些都是在表中的行:如何在C#項目中存儲可配置的字符串?

  • GUID1管理員
  • GUID2系統
  • GUID3技術員
  • GUID4正常

在A用戶'用戶'表可以有幾個角色。 我想要LINQ代碼來檢查特定用戶是否具有角色'技術員'。

這是我的代碼現在:

using (MyDbEntities entities = new MyDbEntities()) 
{ 
    User user = entities.Users.Where(u => u.Id == userIdToFetch).Single(); 

    // Check if user is 'Technician' 
    if (user.Roles.Any(role => role.Name == "Technician") == true) 
    { 
     // user IS technician - do work here 
    } 
} 

我的問題是 - 我不想硬編碼字符串「技術員」我的代碼,因爲 也許有一天,角色名稱在數據庫中將更改爲「Tech」。

我已經看過使用'資源',但這並不好,因爲更改資源中的字符串意味着重新編譯該項目。

我不希望添加到保留此信息, 配置文件中的部分,因爲在我看來,作爲超殺...

有什麼建議?

回答

1

我會使用一張表來存儲所有不同的角色,並將角色的ID與用戶的角色ID相關聯。這樣,只要角色ID保持不變,您就可以隨心所欲地更改角色的名稱。

+0

這正是我今天所做的。但是你建議在代碼中我必須硬編碼技術人員角色id的GUID,而不是字符串「TECHNICIAN」。這似乎會讓我真的很醜陋的代碼,不是嗎? –

+1

您不必硬編碼GUID。您可以在您的配置文件中添加一個設置,您可以在其中存儲您擁有的任何角色的GUID。這就是我通常所做的。我總是在我的應用程序中有一個配置對話框,我可以添加/刪除/編輯這樣的東西。如果您稍後添加新角色,也會更輕鬆。 – Splatbang

+0

那麼爲什麼不在設置文件中做到這一點? –

2

你可以把它作爲一個設置,這意味着你可以讓他們修改配置文件,雖然這將在每個用戶的基礎上。

您可以創建一個DLL來保存字符串,然後refernce它,然後更新只會意味着未來重新部署DLL

你可以把字符串文件,並加載它們離開那裏,銘記你也必須部署這個文件。

0

我會認爲配置文件或資源正是你想要使用的。我想這只是找到正確的平衡的問題:

避免配置文件的複雜性,但需要編譯,或避免編譯,但找到其他地方(某種配置文件,無論是一個文本文件,或者你可以閱讀常量,或別的東西),以將其存儲在一個.dll。在任何情況下,你將需要創建東西讀它。

0

要麼通過在您的解決方案中放入角色的XML文件或在.config文件中添加輸入項來完成此操作。

+1

如果我可以使用設置文件,爲什麼要使用XML文件或CONFIG文件? –

相關問題