情況是,我有一個模型實體的表。該實體具有許多屬性(每個屬性都由表中的列標識)。事情是,在將來我需要添加新的屬性或刪除一些屬性。問題是如何建模數據庫和相應的代碼(使用C#),以便在出現這種情況時,只需「擁有」一個新屬性將非常簡單。泛型和數據庫 - 一個設計問題
在一開始只有一個屬性,所以我有一列。我在類中定義了相應的屬性,使用適當的類型和名稱,然後創建存儲過程來讀取並更新它。然後來到第二個屬性,快速複製粘貼,更改名稱和類型以及一些SQL,然後就是它了。顯然這不是一個合適的模式。在這個時候,你們中的一些人可能會建議一個ORM(EF或其他),因爲這會自動生成SQL和代碼,但現在這不是我的選擇。
我認爲只有一個讀取一個屬性(通過屬性名稱)和另一個更新它(通過名稱和值)的過程,然後一些通用程序讀取同一語句中的一個實體或一個實體的所有屬性。如果您考慮使用泛型,但在數據庫中不知道泛型,那麼在C#中聽起來很容易,所以不可能擁有強大的類型化解決方案。
我想有一個解決方案,「儘可能強類型」,所以我不需要做大量的轉換和解析。我會在代碼中定義可用的屬性,所以你不要猜測你有什麼可用的東西,並使用魔術字符串等。那麼在系統中添加一個新屬性的過程只會意味着在表中添加一個新列並在代碼中添加一個新的屬性「定義」(例如在一個枚舉中)。
爲什麼你不能使用EF?微軟的天才們已經想出了這方面的知識,爲你做了很多工作。我不想看到你重新發明車輪。 – Jay
是的,我不明白你爲什麼需要避免ORM。 (另外,我不知道C#泛型與這些有什麼關係) –
我同意,但EF在架構方面稍微走了一些路,所以我現在還不能使用它。 – CyberDude