2009-09-23 144 views
0

我真的希望你能幫助我,因爲我正要將我的MVC/Entity Framework項目放在bin中並啓動一個MVC/Linq項目。ado.net實體框架大規模混淆

我正在建立一個論壇作爲一個項目來了解MVC/Entity,並且我有4個表都是相關的。

  • Forum_Category,
  • 論壇,
  • 主題,
  • 回覆

所以有一個1對多的Forum_Category和論壇之間CATEGORY_ID。

1 to many of forum_ID between forum and topic。

以及在Topic和Reply之間的Topic_ID上的1到多個。

我明白,你可以使用

Dim F = (From forum in _DataContext.Forum.Include("Forum_Category") _ 
     Where forum.Forum_ID = 1 _ 
     Select forum).First 

但如果我想爲所有的回信中的數據得到一個主題,然後加載了主題的論壇,然後類別加載相關數據?

我設法用代碼來獲取稍微有:

Dim FT = (From F In _dataContext.Topic.Include("Forum") _ 
       Where F.TOPIC_STATUS = ForumSettings.FORUM_STATUS.Active _ 
       Select F).First() 
    Dim TRs = (From F In _dataContext.Topic_Reply _ 
       Where F.Topic.TOPIC_ID = TopicID _ 
       Select F).ToList() 
    For Each TR As Topic_Reply In TRs 
     FT.Topic_Reply.Add(TR) 
    Next 
    Return FT 

但是當我嘗試添加一個新的回覆,我得到了錯誤: 具有相同鍵的對象已經存在於ObjectStateManager。 ObjectStateManager不能使用同一個鍵跟蹤多個對象。

我現在完全失去了。

回答

2
Dim FT = (From T In _dataContext.Topic.Include("Replies").Include("Forum") _ 
      Where T.TOPIC_ID = TopicID _ 
      Select T).First() 

......假設該屬性被稱爲「回覆」而不是「回覆」。 :)

現在你可以看看FT.Replies看到答覆和FT.Forum來看論壇。

請勿使用添加。那是對你的數據庫進行INSERT,當然那些記錄已經在那裏了。這就是錯誤的含義。

這裏的關鍵在於所有的關係都是雙向的。您可以從關係的任一側看到相關對象。