2012-11-19 55 views
1

因此,要把事情看透: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

+0

根據我的經驗,當你通過最基本的數據結構和標準解決方案時,代碼優先方法(對於任何ORM)會非常快地走出窗口。但是,我又喜歡能夠控制底層結構,而不是假裝它不存在。 –

回答

0

我傾向於在存儲庫和服務模式內工作。在我看來,我始終發現固化我的應用程序將要使用的模型(模型)以及它們將如何存儲(結構)更容易。我傾向於使用所有鏈接和FK構建數據庫,構建EF模型(EDMX),然後在其上添加一個作爲Service/Repo層的圖層。這樣,您的應用程序始終只引用該Service/Repo圖層,並且如果您的EDMX發生故障或者您必須更改EDMX的調用方式,則只需將其修復到一個位置即可。最近我一直在混合使用一個Service類的IRepository模式,它似乎很好地齧合,並且易於使用。希望這個澄清一些給你,祝你好運!