2012-04-13 170 views
2

我首先使用EF 5進行遷移和代碼。這一切都很好,但我想解決一些問題/問題。實體框架5枚舉命名

讓我們從一個簡單的例子開始。可以說我有一個用戶表和一個用戶類型表。用戶類型表是我的應用程序中的枚舉/查找表。所以用戶表有一個UserTypeId列和一個外鍵引用等到UserType。在我的poco中,我有一個名爲UserType的屬性,它具有枚舉類型。

要將初始值添加到UserType表(或稍後添加/更改值)並在初始遷移程序等中創建表。我需要一個UserType表poco來表示數據庫中的實際表並用於地圖文件。我將User poco中的UserType屬性映射到UserType poco中的UserTypeId。所以現在我有一個代碼第一/遷移/上下文映射等poco,我有一個枚舉。不能有兩個相同的名稱,所以我有一個名爲UserType的poco和其他用於枚舉的東西,或者讓UserType的poco成爲UserTypeTable或其他東西?

但是,更重要的是,我錯過了代碼首先如何工作的一些關鍵元素?我試過上面的例子,運行Add-Migration,它不會爲枚舉添加查找表。

+0

想看看更多的信息聽起來像是你想類似的東西http://stackoverflow.com/q/11167665/10245同意 – 2016-06-01 15:09:22

回答

0

根據我的經驗,enum比查找類更重要,所以給它一個正確的名字。我還會保持查找類與我的模型中的用戶沒有任何關係。如果它只是用於查找,那麼你不需要掛起你的用戶。你的枚舉與DescriptionAttribute可以完成你的代碼查找。

UserTypeLookup可能是一個好名字,因爲這聽起來像你將使用它。然後,您可以使用該類來維護表格。

假設你不先映射EF代碼UserTypeLookupUser之間的關係,如果你需要在數據庫創建的唯一的事情是手動的foriegn鍵UserType柱之間的User表並從PK關係UserTypeLookup表。 UserTypeLookup仍然可以是一個實體,即使您沒有爲其設置任何關係,EF也應該爲其生成數據庫表。

+0

。正如你所說,我實際上已經命名了我的查找類。問題我現在想解決的問題是,因爲我設置poco使用枚舉和地圖代碼來使用查找,所以migrator將這看作是一個更改,並試圖通過添加名爲「UserTypeLookup」的列來修改數據庫」。我希望能夠在數據庫中查找,我可能不得不求助於在migrator代碼中手動創建表等。 – 2012-04-16 13:01:41

2

如果我正確理解你的問題,你是無所適從,

Enums support has nothing to do with lookup tables on the Db side. 

枚舉只是讓你在你的類是枚舉屬性和被翻譯成「int'-基本上 - 所以沒有其他的東西在那裏。

對於你可能會對這個視頻從Julie Lerman on Enum-s support

希望這有助於

+0

我想他說他有一個字段UserTypeId,他想要映射到一個枚舉(可以說'UserTypeEnum'),並作爲他的查找表的類外部鍵(可以說'UserTypeClass')。 – 2012-04-13 18:10:17

+0

是的,布萊恩,這是正確的。我試圖找出正確的組合,讓代碼先清理(使用枚舉),但仍然創建/連接到數據庫中的查找表。我知道枚舉支持僅在代碼方面,但在實踐中,您仍然需要查找表來確保數據庫中的有效值。目前在工作中,我們有一個生成器,用於從查找表中生成枚舉(包括EnumMember屬性和描述)。如果您首先在模型中使用數據庫,您可以將該列設置爲枚舉類型,並從數據庫爲您創建枚舉。 – 2012-04-16 12:58:04

+0

@TyrelVanNiekerk我明白 - 我認爲你們可以一起工作(這與自定義映射FK-s等相似)。但是你能指定一下你想要達到什麼目的嗎(例如,enum + ID是FK來查找表和類),但是除了枚舉之外,你還必須擁有一個查找類 - 或者你只是想'隱形'查找表等),我會用特定的解決方案編輯問題。 – NSGaga 2012-04-16 13:51:56