在使用LINQ to SQL连接(针对SQL Server Compact Edition)更新一些属性后,在向DataContext执行SubmitChanges时,我得到"未找到或更改行".ChangeConflictException.
var ctx = new Data.MobileServerDataDataContext(Common.DatabasePath);
var deviceSessionRecord = ctx.Sessions.First(sess => sess.SessionRecId == args.DeviceSessionId);
deviceSessionRecord.IsActive = false;
deviceSessionRecord.Disconnected = DateTime.Now;
ctx.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
该查询生成以下SQL:
UPDATE [Sessions]
SET [Is_Active] = @p0, [Disconnected] = @p1
WHERE 0 = 1
-- @p0: Input Boolean (Size = 0; Prec = 0; Scale = 0) [False]
-- @p1: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:12:02 PM]
-- Context: SqlProvider(SqlCE) Model: AttributedMetaModel Build: 3.5.21022.8
Run Code Online (Sandbox Code Playgroud)
显而易见的问题是WHERE 0 …
我遇到完全相同:这个问题(和我完全一样的世界疼痛) 中的LINQ ChangeConflictException到SQL更新
因此,我使用LinqToSQL提供SQL的更新,并且ChangeConflictException因为NOCOUNT设置为失败而失败ON.
由于遗留数据库也在我定位的服务器上,我无法重新配置默认连接设置,正如Linq to Sql update中ChangeConflictException中接受的答案中所说的那样.
我的问题是:SET NOCOUNT OFF在执行更新之前,您如何说服LinqToSQL运行SQL ?