2012-01-26 87 views
1

我有一個問題,我一直沒能找到解決方案,我不知道是否有人可以提供一些建議。模擬datacontext和外鍵/導航屬性

我有一個模擬的datacontext/objectset,通過接口和t4模板完成,有一些ninject魔術,意圖在內存數據集進行單元測試。

但是,您應該如何處理外鍵值/導航屬性?

假設我有酒店和客戶,ctx.Hotels有一些價值,但Customer.Hotels沒有。該得到的是這樣的事情,如果它是一比一的關係:

return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<Hotel>("HotelModel.FK_Customers_Hotels", "Hotel").Value; 

和一個一對多:

return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<BookingRow>("HotelModel.FK_BookingRows_Customers", "BookingRow"); 

我的技術水平是不夠的,甚至瞭解什麼正在這裏。

大師朱莉勒曼證實,這是一個死衚衕。您無法正確地模擬實體對象,因此您需要POCO。

回答

3

嘲笑ObjectContext當你使用基於EntityObject的實體時基本上是不可能的,因爲例如RelationshipManager是一個真正的類,它不能被你的模擬所取代。此外,您的實體嚴重依賴非可嘲笑的EF代碼。

注意:「主要」是因爲您可以模擬它,但您需要特殊的框架攔截對實際對象的調用,並將其轉發給您的方法。只有使用TypeMock Isolator或MS Moles纔有可能。

Btw。嘲笑EF代碼是你不想做的事 - 通過this answer和相關答案。其中一些針對較新的EF API,但問題仍然相同。