title: Entity Framework - Update entities without Id
body: <p>I have found many questions here on SO and articles all over the internet but none really tackled my problem.</p>
  
  <p>My model looks like this (I striped all non essential Properties):
  <a href="https://i.stack.imgur.com/zHCZA.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/zHCZA.jpg" alt="alt text"></a>
  </p>
  
  <p>Everyday or so "Play" gets updated (via a XML-file containing the information).</p>
  
  <pre><code>internal Play ParsePlayInfo(XDocument doc)
  {
      Play play = (from p in doc.Descendants("Play")
      select new Play
      {
          Theatre = new Theatre()
          {
              //Properties
          },
          //Properties
          LastUpdate = DateTime.Now
      }).SingleOrDefault();
  
      var actors = (from a in doc.XPathSelectElement(".//Play//Actors").Nodes()
      select new Lecturer()
      {
          //Properties
      });
  
      var parts = (from p in doc.XPathSelectElement(".//Play//Parts").Nodes()
      select new Part()
      {
          //Properties
      }).ToList();
  
      foreach (var item in parts)
      {
          play.Parts.Add(item);
      }
  
      var reviews = (from r in doc.XPathSelectElement(".//Play//Reviews").Nodes()
      select new Review
      {
          //Properties
      }).ToList();
  
      for (int i = 0; i &lt; reviews.Count(); i++)
      {
          PlayReviews pR = new PlayReviews()
          {
              Review = reviews[i],
              Play = play,
              //Properties
          };
          play.PlayReviews.Add(pR);
      }
      return play;
  }
  </code></pre>
  
  <p>If I add this "play" via Add() every Childobject of Play will be inserted - regardless if some exist already. Since I need to update existing entries I have to do something about that. I guess the problem here is that I have no Id in the XML whatsoever.</p>
  
  <p>As far as I can tell I have the following options:</p>
  
  <ol>
  <li>add/update the child entities in my
  PlayRepositories Add-Method</li>
  <li>restructure and rewrite
  ParsePlayInfo() so that get all the
  child entities first, add or update
  them and <em>then</em> create a new Play.
  The only problem I have here is that
  I wanted ParsePlayInfo() to be
  persistence ignorant, I could work
  around this by</li>
  <li>creating multiple
  parse methods (eg ParseActors() )
  and assign them to play in my
  controller (I'm using ASP.net MVC)
  after everything was parsed and added</li>
  </ol>
  
  <p>Currently I am implementing option 1 - but it feels wrong.</p>
  
  <p>What I want to do is update entities that are already in the database and insert new ones that aren't.
  Do I have to call SaveChanges() before I Attach/Add Play? There must be a (relatively) easy solution.
  I'd appreciate it if someone could guide me in the right direction on this one.</p>