我真的希望你可以帮助我,因为我将把我的MVC / Entity Framework项目放在bin中并启动一个MVC / Linq项目。
我正在建立一个论坛作为一个项目,只是为了了解MVC / Entity,我有4个表都是相关的。
所以Forum_Category和论坛之间的Category_ID有1到多个。
论坛和主题之间的Forum_ID上有1到多个。
和主题与回复之间的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无法使用相同的键跟踪多个对象。
我现在完全迷失了。
答案 0 :(得分: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,当然那些记录已经存在。这就是错误的含义。
这里的关键见解是所有关系都是双向的。您可以从关系的任何一侧查看相关对象。