Linq冲突错误

时间:2011-07-23 21:44:57

标签: asp.net linq c#-4.0 conflict

我一直在我的网站上获取这些内容,访问者也会定期报告这些内容。刷新页面总能修复它。这是我从服务器获得的典型电子邮件报告:

  

错误:http://www.scirra.com/ReleaseView.aspx?rtitle=r49错误   消息:未找到或更改行。堆栈跟踪:at   System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode   failureMode)at   System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)   在MasterPages_Main.Page_Init的LoggedInUser..ctor()中(对象发送者,   EventArgs e)at   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object   o,对象t,EventArgs e)at   System.Web.UI.Control.InitRecursive(Control namingContainer)at   System.Web.UI.Control.InitRecursive(Control namingContainer)at   System.Web.UI.Page.ProcessRequestMain(布尔   includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)

它没有给出行号或其他任何有用的东西。有问题的页面根本没有做任何复杂的事情。

有什么想法吗?这不是我设法重现的错误,它只是经常发生。

2 个答案:

答案 0 :(得分:2)

怀疑您的LINQ To SQL .dbml与您的数据库不同步。模型是旧的,或者生产数据库与创建.dbml时的生产数据库不同。是否修改了任何列?也许专栏的可空状态已经改变了?

尝试从.dbml设计图面中删除并添加有问题的表格。不确定您是否有多个环境(dev / test / prod),但是对生产数据库执行此.dbml更改,并重新部署您的应用程序。

也许请仔细检查您的表和dbml实体是否符合您的预期,属性可以为属性上的属性。 Another problem showing the same symptom。还要考虑任何DateTime列以及是否可以将这些列/属性设置为“从不”以进行并发检查。

答案 1 :(得分:1)

听起来您尝试更新的行已过时(数据库中的当前行与从数据库中获取的行不匹配)。 'Conflictmode failureMode'的默认值是在发生冲突时引发异常。见this msdn page

您应该检查为什么最终会在这些行中包含过时数据。它被某些东西或其他人改变了。你在缓存数据吗?你在网络农场运行吗? .... 我认为this page描述了你如何处理它。