ado.net实体框架大量混乱

时间:2009-09-23 18:22:50

标签: asp.net-mvc entity-framework ado.net

我真的希望你可以帮助我,因为我将把我的MVC / Entity Framework项目放在bin中并启动一个MVC / Linq项目。

我正在建立一个论坛作为一个项目,只是为了了解MVC / Entity,我有4个表都是相关的。

  • Forum_Category,
  • 论坛,
  • 主题,
  • 回复

所以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无法使用相同的键跟踪多个对象。

我现在完全迷失了。

1 个答案:

答案 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,当然那些记录已经存在。这就是错误的含义。

这里的关键见解是所有关系都是双向的。您可以从关系的任何一侧查看相关对象。