LINQ context - row not found or not modified

I get quite frequent error reports from my users, typical of them:

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)

(if necessary, I can provide more detailed information). The only direct LINQ code in this function is LoadArticle():

    using (MainContext db = new MainContext())
    {
        var q = (
                    from A in db.tblArticles
                    where A.ID == this.ArticleID && 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) < 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 && 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;
        }
    }

There LoadArticlemay be other functions that reference methods that run LINQ, but I assume that stacktrace will look different, so the above code is the reason.

Any ideas on what might cause this? Data Conflict? How does this error usually occur?

Any ideas what might cause this?

+5
source share
3 answers

, L2S . concurrency, , , . . , . UpdateCheck ColumnAttribute :

[Column(Storage="lastView", Name="LastView", 
 DbType="datetime", UpdateCheck=UpdateCheck.Never)]
public DateTime LastView { ... }

, , sqlmetal/dbml - , , ( , , ).

+6

, , . DbContext , . , , .Refresh() DbContext:

var productToUpdate = _dbContext.Products.SingleOrDefault(p => p.ID == product.ProductID);
_dbContext.Refresh(RefreshMode.OverwriteCurrentValues, productToUpdate);

// do changes...
_dbContext.SubmitChanges();
+2

Updating and deleting only works out of the box if you add tables to the dbml file. If you manually encoded your entities, you will have to manually process the updates and delete

0
source

All Articles