2011-10-02 29 views
1

我不確定這是否可行,但在C#中有沒有辦法讓我生成靜態成員或數據庫表中所有查找值的枚舉器?通過綁定到數據庫查找表來自動生成類屬性

例如,如果我有一個有2列的國家的表:code,countryname。我想辦法給所有行轉換此表爲一類properity的每一行,所以我可以做到以下幾點:

string countryCode = Country.Egypt.Code 

其中埃及是從數據庫表中生成的屬性。

+1

你只是想生成一個以後可以編譯的源代碼,或者你真的想通過運行時反射來「創建一個新類」? –

+0

如果您正在尋找像Branko一樣的源代碼,請查看t4模板。 –

+0

我希望能夠在設計時在源代碼中這樣做。我想我以前在VS中看到過這種行爲對於某些數據類型。它在設計時預測屬性,並通過智能在類對象屬性中看到它。我不知道這個功能究竟在哪裏,並且想知道它是否可行。 – mohammedn

回答

0

這不能完成,因爲Country.Egypt必須在編譯時間可用。我認爲你的選擇是:

  1. 從數據庫生成Country類的代碼。當然,問題是客戶如何使用它?

  2. 保持屬性是靜態聲明和讀取數據庫的代碼應用程序啓動過程中

  3. 保持性能以及代碼靜態聲明,並檢查他們對數據庫應用程序的啓動過程中。

而且上面的#1,如果客戶端代碼不依賴於個人財產的名稱,然後這些都不是類型,但數據你也可以同樣使用Country.AllCountries屬性是在啓動時初始化。

1

當你說「要轉換所有行」時,你的意思是「轉換所有」?

我這樣,如果您的ADO.NET提供程序支持它,您可以使用LINQ to SQL自動生成一個具有與您的表中的列匹配的屬性的類。您可以按照以下步驟操作:

  1. 右鍵單擊您的項目並添加/新建項目/ LINQ to SQL類。默認情況下,這將生成一個帶有DataClasses1DataContext類的DataClasses1.dbml文件。
  2. 在數據連接下展開服務器資源管理器中感興趣的數據庫連接(您可能需要首先通過右鍵單擊數據連接來添加它)。
  3. 選取感興趣的表格並拖放到DataClasses1.dbml的表面上。

假設你的表名是COUNRTY帶有字段名稱及代碼,然後你可以用它從你的代碼是這樣的:

using (var db = new DataClasses1DataContext()) { 
    COUNRTY egypt = db.COUNRTies.Where(row => row.NAME == "Egypt").SingleOrDefault(); 
    if (egypt == null) { 
     // "Egypt" is not in the database. 
    } 
    else { 
     var egypt_code = egypt.CODE; 
     // Use egypt_code... 
    } 
} 

如果你真的意味着「行」,我沒有意識到自動化的方式來做到這一點(這並不意味着它不存在!)。編寫一個遍歷所有行的小程序,提取實際值並生成一些C#文本應該是一個相當簡單的練習。

但即使你這樣做,你將如何處理數據庫更改?說,從數據庫中刪除一個值,但它仍然存在於你的程序中,因爲它在編譯時存在?或者被添加到數據庫中,但是從程序中丟失了?

+0

感謝您的回答。我正在考慮將它用於未來不會改變的查找。你會告訴我,如果它不會改變,那麼爲什麼你把它放在數據庫中?實際上,我需要對數據庫進行規範化處理,同時在處理這種靜態查找時獲得更多的描述性代碼。難以平衡的等式,但感謝您的幫助! – mohammedn

+0

順便說一句我打算將「行」轉換爲一個類中的屬性。 – mohammedn

+0

@mohammedn相信我,國家確實會改變。哎呀,我住在一個這樣的國家 - 塞爾維亞;) –

相關問題