Я получаю достаточно частые сообщения об ошибках от моих пользователей, типичный из них:
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)
(при необходимости я могу дать более подробные сведения). прямой код LINQ в этой функции 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;
}
}
В LoadArticle
могут быть другие функции, которые ссылаются на методы, запускающие LINQ,но я предполагаю, что трассировка стека будет выглядеть иначе, поэтому приведенный выше код является причиной.
Есть идеи относительно того, что могло бы вызвать это? Конфликт данных? Как обычно разрешается такая ошибка?
Есть идеи, что могло бы ее вызвать?