2009-12-01 63 views
1

我有兩個簡單的表如下描述...實體框架可以將兩個關聯映射爲單個導航嗎?

Table = Person 
    PersonID (int, PrimaryKey) 
    FirstName (char) 
    LastName (char) 

Table = Related 
    RelatedID (int, PrimaryKey) 
    Person1  (int, ForeignKey for Person.PersonID) 
    Person2  (int, ForeignKey for Person.PersonID) 
    Relationship (int) 

生成的實體人有兩個導航集合。一個用於Related.Person1,另一個用於Related.Person2。這是一個痛苦,因爲這意味着我有兩個收藏來調查以查找與該人相關的所有關係。

我需要有一個包含這兩個集合,而不是隻是一個單一的導航集。是否有可能將此作爲實體frameowrk的一部分生成?唯一的選擇是自己生成第三個集合,其中包含實體的集合集合,並且感覺不應該需要它。

+0

這似乎是一個壞主意。如果您將實體添加到提議的合併集合中,那麼EF如何知道您的兩個集合中的哪一個集合? – 2009-12-01 14:10:20

回答

2

克雷格指出你問的是不是核心EF但是......友誼類型的關係是那些討厭的那些模型之一,所以我看到你正在嘗試做的。

有一種變通方法,以使這成爲可能通過映射關聯集在SSDL視圖(DefiningQuery)。

由視圖支持的關聯/關係將是隻讀的,因此您可能希望將其他兩個關係留在原地以允許您從正確的集合中添加/刪除或者當您想要搜索時只在一個方向。

退房這個職位which shows the techniques參與更多。

希望這有助於

亞歷

+0

感謝您的幫助。我在想,你有兩個節點A和B存儲並且它們之間存在關係。我只想保存一次這種關係。但是我想知道節點A和節點B之間的關係。所以它只存儲一次,但是代表兩個地方,即關係的兩端。 – 2009-12-02 00:37:15

+0

存儲一次,但代表它在多個地方是我的建議。事實上,這就是博客文章的作用。 – 2009-12-02 03:44:59