2009-09-23 7 views
0

J'espère vraiment que vous pouvez m'aider car je suis sur le point de lancer mon projet MVC/Entity Framework dans la corbeille et de démarrer un projet MVC/Linq.ado.net entité cadre massive confusion

Je construis un forum en tant que projet juste pour apprendre à connaître MVC/Entity, et j'ai 4 tables qui sont toutes liées.

  • Forum_Category,
  • Forum,
  • Sujet,
  • Répondre

donc il y a 1 à plusieurs sur category_id entre Forum_Category et Forum.

1 sur plusieurs sur Forum_ID entre le forum et le sujet.

et un à plusieurs sur Topic_ID entre Sujet et Répondre.

Je comprends que vous pouvez charger des données liées à l'aide

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

mais si je voulais obtenir les données pour tous les replys à un seul sujet, puis charger le forum du sujet et la catégorie?

J'ai réussi à obtenir un peu là-bas avec le code:

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 

Mais quand j'ai essayé d'ajouter une nouvelle réponse, je suis l'erreur: Un objet avec la même clé existe déjà dans le ObjectStateManager. ObjectStateManager ne peut pas suivre plusieurs objets avec la même clé.

Je suis complètement perdu maintenant.

Répondre

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

... en supposant que la propriété est appelée "Réponses" et non "Réponses". :)

Maintenant, vous pouvez regarder FT.Replies pour voir la réponse et FT.Forum pour voir le Forum.

Ne pas utiliser Ajouter. C'est pour faire un INSERT dans votre DB, et bien sûr ces enregistrements sont déjà là. C'est ce que l'erreur signifie.

L'idée clé ici est que toutes les relations sont bidirectionnelles. Vous pouvez voir l'objet associé de chaque côté de la relation.