2014-07-14 63 views
1

我想用StateStatus這樣的表跟蹤一些使用數據庫的工作。每個Status表的FK爲State。有效狀態可能與「轉移」類似,它的狀態可能是「活動」或「已完成」。會有第三個表(可能是StatusEvent)。我正在使用實體框架6.0映射到數據庫。將數據庫用於狀態的正確方法

我想弄清楚的一件事是如何在我的C#代碼中正確表示這些狀態和狀態。例如,可能有以下幾種狀態:

StateId Name 
1   active 
2   complete 
3   error 

在我的代碼中,我想將狀態設置爲'active'。我可以找到與「活動」文本相匹配的StateId,然後使用它。也許讓它更安全ToLower()什麼的。我也可以保留一個狀態ID列表。類似於const int Active = 1。但後來我需要確保分貝中沒有真正的變化...

最後,我想能夠調用像SetStateOnStatus(int statusId, State state)這樣的方法。

我從實體框架中查看了Enum的東西 - 看起來並不實際,因爲狀態描述只是在代碼中,而db只是包含一個int。我需要在另一個表中包含這些描述,以便稍後可以查詢數據庫。也許我在這裏錯過了一些東西?

那麼這樣做的正確方法是什麼?

+1

查詢表是SQL數據庫中相當常見的做法。它們是Enum的數據庫。 –

+0

相關:http://codemeek.blogspot.com/2013/03/lookup-table-design-for-entity.html –

+0

有一件事,我想我錯過了...不是狀態'已經'一個查找表?這是我的數據庫枚舉... – Nicros

回答

1

正如羅伯特所說,使用查找表是很好的。 您可以創建valid_status和valid_state表,您可以在其中填寫用戶定義的值,如前所述。每當你插入狀態,從狀態表中獲取它。類似的方式,你可以得到stateid而不是作爲硬編碼值傳遞。

1

你真的需要州表嗎?如果狀態值將被修復,那麼你可以像你在代碼中建議的那樣創建一個枚舉。 (整數映射到他們將做 - 公共枚舉狀態{Active(1),..;}) 這將節省您的時間,使您不必進行數據庫調用。

您可以創建狀態表,但不是將外鍵指定爲狀態,而是可以具有狀態列。這將包含從枚舉中檢索的int值。

當您調用setStateOnStatus(..)時,您可以進行數據庫調用,將信息保存在那裏。

如果在國家中的值會經常變化的話,我想這會是有意義的有國家表

+0

是的,硬定義的值,枚舉是理想的;聽起來很適合這裏。有時候,表*另外*是有用的,可以添加額外的元數據並充當外鍵(在某些方面比編輯更容易編輯);這一切都取決於開發人員或常規用戶是否定義了新值。 –

+0

我認爲我確實需要狀態表...例如,其他人可能需要通過state ='active'項來查詢數據庫。例如通過一些BI工具。 – Nicros

+0

無論誰查詢數據庫和使用哪種工具,如果狀態值(活動,完成...)將相同,則枚舉將工作得很好。您仍然可以使用State中的不同值映射狀態 – ND27

0

所以我不會紀念這個作爲回答,因爲我不知道這是否是最好的方法。但是我最終做的是使用t4模板,使用similar to this(但不完全如此)在我保存/運行模板生成時生成枚舉。然後我使用這些枚舉來進行我的方法調用。

相關問題