2011-11-20 70 views
0

複雜的關係花了這麼多時間試圖得到這個工作後建議,我不得不承認,我靠近拉我的頭髮,並希望得到一些幫助,實際上發生之前!需要幫助,並在創造EF 4.1

這是很難解釋的實際應用斷章取義 - 這是我能想到的最好的例子。

public class TheObject{ 
    public int ID {get;set;} 
    public string name {get;set;} 

    public int? CategoryNavID {get;set;} 
    public virtual Category CategoryNav {get;set;}} 

public class CategoryNav{ 
    public int id {get;set;} 
    public virtual ICollection<Category> Category {get;set;}} 

public class Category{ 
    public int ID {get;set;} 
    public string name {get;set;} 

    //The category this is currently in. 
    public int CategoryNavID 

    //To create sub categories. 
    public int? CategoryID {get;set;} 
    public virtual Category Category {get;set;}} 

因此,基本上,有一堆對象的,對象可以有許多種類附加,和進一步於此,一個類別可以具有附接(一個無限級)多個類別。

再次,這是很難斷章取義的解釋 - 這是不實際的系統,但是,這是最終的目標,我想實現。

很坦率地說,我一直在努力做到這一點,並且我不確定我是否最好使用CategoryNav類,或者如果有更好,更直接的方法來做到這一點。

我只是想一個解決方案,我可以很容易地得到一個對象,然後去了所有類別,那麼所有的子類別,無限的水平。 (目前,我正在考慮獲取對象,那麼如果CategoryNavID不爲空,請獲取所有內容,並且基本上繼續對所有返回的類別執行此操作)

我已經非常接近這個了,但是,我只是不能解決所需的EF FluentAPI/Data Annotations,以便將多個鏈接從Category重新導入Category nav。

最後,我還想盡可能獲得一個CategoryNav/ID,並獲取它所屬的原始對象 - 即使它是最後一個子類別 - 鏈條中的20個。這完全沒有要求,因爲我有邏輯* - 我只是確定我不是最有效的方法。 - 目前認爲在類別中創建「TheObject」FK會更容易 - 我知道你不應該在不需要的地方重複數據,但是,我認爲這將是迄今爲止最簡單的解決方案。

*目前,我正在走很長的路程 - 獲取類別/ Nav的ID,檢查它是否存在爲Object/CategoryNavID,如果不存在,則返回到類別,然後搜索將它作爲categoryID的任何類別,然後獲取該類別ID,並基本上保持循環此操作,直到找到頂級對象。

無論如何,所有/任何幫助將大大讚賞!很高興回答任何問題。

+0

我希望這讀起來很好,如果沒有,我把它歸咎於編碼整天,幾乎沒有在哪裏....請讓我知道,我會在早上重新編輯/嘗試整理。 – Wil

回答

1

如果我正確理解您的問題,您基本上需要您的TheObject類和Category類之間的多對多關係。如果您在SQL的角度來考慮這一點,你將有一個TheObject表,Category表,連接表,你有可能試圖與你CategoryNav類實現。

查閱這些職位的幫助在第一次創建與EF代碼許多一對多的關係:

至於類別樹,你會想要一個一對多的關係,這樣每個子類別只有一個父類別,否則你正在處理一個圖表這將使遍歷更加複雜。

最後,關於CategoryNav課程,我不確定您試圖通過與TheObject關聯的類別鏈接以外的方式實現。在TheObject課程中收集CategoryCategoryNav背後有其他含義嗎?