2014-04-10 78 views
0

只用代碼優先的實體框架繼承一些問題。用代碼優先的實體框架繼承

我實現繼承使用代碼優先模式(也就是,我有一個基類Request和其它類繼承它NewSpaceRequest .etc。

似乎框架/語言沒有提供遠遠超出這個至於功能

例如,我想有一個視圖有一個所有的請求的列表,不同的文本取決於請求的類型我不能找出一個簡單的方法來做到這一點因爲我總是需要註冊到Request,這意味着我失去了我所有的子類功能,我曾有過。

無論如何,我發現了一個奇怪的方法,我有一個視圖中的請求列表。我想讓用戶點擊一個鏈接(列表中的每個請求都有一個鏈接),併發送給一個根據請求類型而改變的動作。問題是,到目前爲止,我所有的請求都是Request(我相信這是foreach的一個要求),所以我不知道它們是什麼。

這只是像這樣的小問題,我繼續使用代碼優先繼承時遇到的問題。難道我做錯了什麼?

+0

爲什麼你需要上傳到'Request'? – haim770

+0

要明確:你的'Request'不是HttpRequest,而是你自己定義的類,是嗎? –

+0

@ haim770:在我的情況下,正確使用foreach。投射到var更無用。 –

回答

1

看來,框架/語言沒有提供遠遠超出這個只要功能

沒有,因爲這不是EF的責任。它爲你實現了正確的子類型做了很好的工作,然後它的工作就結束了。 EF是關於數據的。行爲在程序員的盤子上。

在你的代碼中,你可以使用整個繼承和多態性庫來獲得你想要的行爲。基類可以有一個子類重寫的方法來執行所需的操作。所以你應該直接點擊鏈接到基類中的這個方法。

我失去(...)我的能力,告訴我有什麼類

所以,如果你能夠利用多態性的這個機制,它沒有必要知道你正在處理的特定類型。這與使用「幹」POCO進行繼承時的方式完全相同。無論何時您覺得需要做類似if (instance is MySubType)的事情,通常會出現一些設計缺陷。