title: LINQ conflict - Row not found or changed
body: <p>I've been getting reasonably frequent error reports from my users, a typical one is:</p>
  
  <pre><code>Error Message: Row not found or changed.
  Stack Trace:
  at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) 
  at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) 
  at Controls_Article_ArticleViewer.LoadArticle() 
  at ViewTutorial.Page_Load(Object sender, EventArgs e) 
  at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) 
  at System.Web.UI.Control.LoadRecursive() 
  at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  </code></pre>
  
  <p>(I can give more specifics if needed).  The only direct LINQ code in that function <code>LoadArticle()</code> is:</p>
  
  <pre><code>    using (MainContext db = new MainContext())
      {
          var q = (
                      from A in db.tblArticles
                      where A.ID == this.ArticleID &amp;&amp; A.IsDeleted == false
                      select A
                  ).SingleOrDefault();
          if (q == null)
          {
              Server.Transfer("~/404.aspx");
              Context.Response.End();
          }
          else
          {
              // Cache expired for HTML generation
              if (q.HTMLLastGenerated.AddSeconds(Settings.ArticleRegenHTMLCacheSecs) &lt; DateTime.Now)
              {
                  q.Body = ArticlesCommon.Markdown(q.MarkupBody);
                  q.HTMLLastGenerated = DateTime.Now;
              }
  
              q.Views++;
              q.LastView = DateTime.Now;
              db.SubmitChanges();
  
              // Set passbakcs
              this.AuthorID = q.AuthorID;
              this.Anchor = q.Anchor;
              this.SectionID = q.SectionID;
              this.Views = q.Views;
              this.DatePublished = q.Date;
              ArticleAnchor = q.Anchor;
              ArticleAuthorID = q.AuthorID;
  
              // Get the latest edit
              ArticleEdit LatestEdit = ArticleEditCommon.GetLatestEdit(this.ArticleID);
              // An edit exists!
              if (LatestEdit.ID != 0)
              {
                  this.Description = LatestEdit.Description;
                  this.ArticleTitle = LatestEdit.Title;
                  ArticleBody.Text = LatestEdit.Body;
                  ArticleH1.Text = ArticleTitle;
              }
              // No edits
              else
              {
                  this.Description = q.Description;
                  this.ArticleTitle = q.Title;
                  ArticleBody.Text = q.Body;
                  ArticleH1.Text = ArticleTitle;
              }
  
              // Get toal comments
              TotalComments = (from C in db.tblComments where C.IsDeleted == false &amp;&amp; C.Anchor == ArticleAnchor select new { C.ID }).Count();
  
              // Get author details
              var qq = (from A in db.tblForumAuthors where A.Author_ID == ArticleAuthorID select new { A.Username }).Single();
              AuthorUsername = qq.Username;
          }
      }
  </code></pre>
  
  <p>There may be other functions in <code>LoadArticle</code> that reference methods that run LINQ, but I am guessing the stacktrace would come out differently, so the code above is the cause.</p>
  
  <p>Any ideas as to what would cause this?  A data conflict?  How is this sort of error resolved usually?</p>
  
  <p>Any ideas what would cause this?</p>