我不確定這是否可行,但在C#中有沒有辦法讓我生成靜態成員或數據庫表中所有查找值的枚舉器?通過綁定到數據庫查找表來自動生成類屬性
例如,如果我有一個有2列的國家的表:code,countryname。我想辦法給所有行轉換此表爲一類properity的每一行,所以我可以做到以下幾點:
string countryCode = Country.Egypt.Code
其中埃及是從數據庫表中生成的屬性。
我不確定這是否可行,但在C#中有沒有辦法讓我生成靜態成員或數據庫表中所有查找值的枚舉器?通過綁定到數據庫查找表來自動生成類屬性
例如,如果我有一個有2列的國家的表:code,countryname。我想辦法給所有行轉換此表爲一類properity的每一行,所以我可以做到以下幾點:
string countryCode = Country.Egypt.Code
其中埃及是從數據庫表中生成的屬性。
這不能完成,因爲Country.Egypt
必須在編譯時間可用。我認爲你的選擇是:
從數據庫生成Country類的代碼。當然,問題是客戶如何使用它?
保持屬性是靜態聲明和讀取數據庫的代碼應用程序啓動過程中
保持性能以及代碼靜態聲明,並檢查他們對數據庫應用程序的啓動過程中。
而且上面的#1,如果客戶端代碼不依賴於個人財產的名稱,然後這些都不是類型,但數據你也可以同樣使用Country.AllCountries
屬性是在啓動時初始化。
當你說「要轉換所有行」時,你的意思是「轉換所有列」?
我這樣,如果您的ADO.NET提供程序支持它,您可以使用LINQ to SQL自動生成一個具有與您的表中的列匹配的屬性的類。您可以按照以下步驟操作:
DataClasses1DataContext
類的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#文本應該是一個相當簡單的練習。
但即使你這樣做,你將如何處理數據庫更改?說,從數據庫中刪除一個值,但它仍然存在於你的程序中,因爲它在編譯時存在?或者被添加到數據庫中,但是從程序中丟失了?
你只是想生成一個以後可以編譯的源代碼,或者你真的想通過運行時反射來「創建一個新類」? –
如果您正在尋找像Branko一樣的源代碼,請查看t4模板。 –
我希望能夠在設計時在源代碼中這樣做。我想我以前在VS中看到過這種行爲對於某些數據類型。它在設計時預測屬性,並通過智能在類對象屬性中看到它。我不知道這個功能究竟在哪裏,並且想知道它是否可行。 – mohammedn