因此,要把事情看透:Code First - 我覺得我錯過了點
到現在爲止,我已經有一些使用Entity Framework edmx模型的經驗。過程(層明智)將總結到:
- 創建數據庫,其在EDMX文件
- 有業務對象層生成的對象層(我不知道,如果企業是正確的字)從edmx對象初始化(並且只有業務對象在我的應用程序中使用)
- 在MVC站點有一個視圖模型對象的任何地方需要的地方(每當直接從我的業務對象生成視圖不會工作)
我在im下在Code First中,數據庫層對象(以前稱爲edmx對象)和業務層對象是相同的,實際上跳過了一層。那是一個比我有更多經驗的同事告訴我的。
問題是我認爲這不太適用。代碼的侷限性首先像標量鍵一樣,在對象內部具有導航屬性,無法在數據庫中映射私有字段而沒有解決方法,並且被迫在各處都有自動屬性感覺我在搞亂我的業務對象。
快速示例: 我的實體:
- 球隊:TeamId和說明(後端,前端等)
- 組:groupId和說明(開發人員,TeamLeaders,經前期綜合徵,等等)
- 狀態:有一個團隊和一批對象,一些不被保存在DB
- 用戶裏面:用戶ID,名字,姓氏
- 員工:用戶這也是不相上下一個團隊的T和A組(裏面有一個用戶屬性和狀態屬性)
用戶表格將在這個意義上,將包含所有的用戶類有信息就被反規範化,但也有TeamId和GroupId,只有在用戶也是員工時纔會填充該ID。所以基本上員工和用戶映射到同一個表
這導致一些奇怪的解決方法,因爲例如在Employee類中我需要公開UserId作爲主鍵,而不是通過User屬性的UserId獲取它(因爲關鍵需要標量)這是醜陋的;此外,即使我在Employee類中有一個Status屬性,我仍然需要2個額外的屬性(TeamId和GroupId,從狀態屬性Team and Group中獲取)以便爲組和團隊標量外鍵麻煩而且感覺混亂。在Group/Team類中添加一個用於導航的虛擬IList似乎也不需要(儘管從我看到的這個可以跳過)。也只有自動屬性的對象似乎是錯誤的,我想有ctor實例化私人和只有他們的獲得者。
我不明白嗎?即使首先使用代碼,我是否還需要額外的圖層?我的模型從一開始就搞砸了嗎?對不起,我不能爲您提供代碼,但我現在不在家,代碼塊看起來非常不友善:D
根據我的經驗,當你通過最基本的數據結構和標準解決方案時,代碼優先方法(對於任何ORM)會非常快地走出窗口。但是,我又喜歡能夠控制底層結構,而不是假裝它不存在。 –