2009-08-05 188 views
2

我有名爲Events和Log的表。事件表由ID,事件描述和類型組成。並且,日誌包含LogID,EventID(引用Event表中的ID)和timstamp。從實體創建枚舉

我正在使用實體框架。在日誌表中輸入條目時,我提到了事件ID,作爲Event表中與日誌事件對應的編號。當我繼續在應用程序中使用此日誌記錄時,記住記錄事件的事件ID變得很麻煩。我想將這些事件ID映射爲我的代碼中的枚舉,並使用枚舉以獲得更好的可用性。

有沒有人使用這種方法創建枚舉?如果是這樣,請分享您對創建設計的想法。

回答

2

這是可能的,但你必須手動定義enum

這是否是好設計取決於您定義的不同事件的數量以及時間。是否可以創建新的事件定義而不必更改代碼?在這種情況下,enum可能是一個壞主意。如果事件ID列表是靜態的並且不是太大,那麼enum將是可接受的,並且(在我看來)甚至是可以鼓勵的。

編輯:我的歉意,我提供的解決方案實際上是它在LINQ to SQL,而不是Entity Framework 1.0中完成的方式。一定是缺乏咖啡。在EF中完成的方式是在分部類中定義一個正確類型的屬性。

例如,我在我的數據庫中有一個EventType列,我想要映射到一個enum。我已經從默認EventType更名爲財產EventTypeInt,你可以看到如下:

EventCalendar table mapping in model http://www.subbot.net/personal/external/stackoverflow/entityframework-enum.png

然後你此列設置吸氣二傳手屬性私人(在您可能用於重命名EventType的屬性管理器窗口中)。一旦完成並保存,請使用以下代碼:

public enum EventType 
{ 
    Unknown = 0, 
    Concert = 1, 
    Festival = 2 
} 

public partial class EventCalendar 
{ 
    public EventType EventType 
    { 
     get { return (EventType)EventTypeInt; } 
     set { EventTypeInt = (int)value; } 
    } 
} 

是的,它很單調乏味。在LINQ to SQL模型中它更實用。

0

而不是創建ENUMS你有沒有考慮將它們表示爲實體集中的導航屬性?

+0

你能爲此拋出更多的光芒嗎?一個例子或參考將是偉大的! – pencilslate 2009-08-07 14:57:49

+0

在你的初始描述中你說過:「事件表包含ID,事件描述和類型,並且日誌包含LogID,EventID(引用事件表中的ID)和timstamp。」我認爲這意味着EventID列與事件表中的ID之間有外鍵關係。如果是這種情況,如果您從數據庫中生成EDMX文件,EF1將根據此關係創建導航屬性。這些導航屬性將允許您執行查找,就像使用數據庫一樣。例如:logInstance.Event.ID會給你相應的事件ID。 – 2009-08-07 17:16:52