linq-to-sql – 将Linq中的ChangeConflictException异常更新为Sql
|
我正处于一个痛苦的世界,如果有人可以帮助,我会非常感激。 我有一个DataContext连接到数据库上的单个测试表。测试表如下: CREATE TABLE [dbo].[LinqTests](
[ID] [bigint] IDENTITY(1,1) NOT NULL,[StringValue] [varchar](255) NOT NULL,[DateTimeValue] [datetime] NOT NULL,[BooleanValue] [bit] NOT NULL,CONSTRAINT [PK_LinqTests] PRIMARY KEY CLUSTERED ([ID] ASC))
ON [PRIMARY]
使用Linq,我可以添加,检索和删除测试表中的行,但是我无法更新一行 – 对于UPDATE,我总是得到一个带有一个空的ObjectChangeConflict.MemberConflicts集合的ChangeConflictException。以下是使用的代码: var dataContext = new UniversityDataContext();
dataContext.Log = Console.Out;
for (int i = 1; i <= 1; i++) {
var linqTest = dataContext.LinqTests.Where(l => (l.ID == i)).FirstOrDefault();
if (null != linqTest) {
linqTest.StringValue += " I've been updated.";
}
else {
linqTest = new LinqTest {
BooleanValue = false,DateTimeValue = DateTime.UtcNow,StringValue = "I am in loop " + i + "."
};
dataContext.LinqTests.InsertOnSubmit(linqTest);
}
}
try {
dataContext.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException exception) {
Console.WriteLine("Optimistic concurrency error.");
Console.WriteLine(exception.Message);
Console.ReadLine();
}
Console.ReadLine();
以下是通过DataContext执行的更新的日志输出。 UPDATE [dbo].[LinqTests] SET [StringValue] = @p3 WHERE ([ID] = @p0) AND ([StringValue] = @p1) AND ([DateTimeValue] = @p2) AND (NOT ([BooleanValue] = 1)) -- @p0: Input BigInt (Size = 0; Prec = 0; Scale = 0) [1] -- @p1: Input VarChar (Size = 15; Prec = 0; Scale = 0) [I am in loop 1.] -- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [3/19/2009 7:54:26 PM] -- @p3: Input VarChar (Size = 34; Prec = 0; Scale = 0) [I am in loop 1. I've been updated.] -- Context: SqlProvider(Sql2000) Model: AttributedMetaModel Build: 3.5.30729.1 我在集群SQL Server 2000上运行此查询(8.0.2039)。在我的生活中,我不能弄清楚这里发生了什么。对DB运行类似的UPDATE查询似乎工作正常。 提前感谢任何帮助。 解决方法我终于知道发生了什么事情。显然,此服务器已启用“无计数”选项。在Microsoft SQL Server Management Studio 2005中: >右键单击服务器,然后单击属性 显然,LINQ to SQL在更新后使用@@ ROWCOUNT来发布自动化的乐观并发检查。当然,如果为整个服务器启用“不计数”,@@ ROWCOUNT总是返回零,LINQ to SQL会在发出数据库更新后引发ConcurrencyException。 这不是LINQ to SQL使用的唯一更新行为。如果您的表上有一个TIMESTAMP列,则LINQ to SQL不会对@@ ROWCOUNT执行自动的乐观并发检查。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何从SQLServer2005表中删除字段
- sql-server – 是否有理由手动更新统计信息?
- sql-server – 我可以启动存储过程并立即返回而不等待它完成
- sql – ALTER TABLE语句与FOREIGN KEY约束冲突
- SQL Server substring函数使用方法小结
- Powershell Invoke-Sqlcmd的错误检测并不总是有效?
- sql – 如何用jOOQ表达“选择别名.*,otherAlias.Column Fro
- 将GETDATE()与SQL Server中存储的GETDATE()进行比较的结果错
- 分享Android 蓝牙4.0(ble)开发的解决方案
- SQL:中断查询
