gpt4 book ai didi

entity-framework - EF4-更新[Table]设置@p = 0,其中

转载 作者:行者123 更新时间:2023-12-04 07:21:28 24 4
gpt4 key购买 nike

通过SQL事件探查器时,我注意到EF4生成的以下查询。

exec sp_executesql N'declare @p int
update [dbo].[User]
set @p = 0
where (([UserID] = @0) and ([RowVersion] = @1))
select [RowVersion]
from [dbo].[User]
where @@ROWCOUNT > 0 and [UserID] = @0',N'@0 int,@1 binary(8)',@0=1,@1=0x000000000042DDCD

我不确定为什么EF4会生成此文件,而实际上我没有更新该UnitOfWork中的User表的任何列。运行此查询将更新 RowVersion列(时间戳数据类型),这将在下一个UnitOfWork中导致OptimisticConcurrencyException。

快速搜索将我带到了这个 link,它确认其他人也遇到了这种情况,但尚未找到解决方案。

将不胜感激任何指针。

编辑:一个用于复制问题的示例代码。

用户表和 session 表具有 外键关系。另外,在EF4中,我将两个实体的RowVersion列的 “并发模式” 属性设置为 固定

下面是复制该方案的示例方法。
 private static void UpdateSession()
{
using (var context = new TestEntities())
{
context.ContextOptions.ProxyCreationEnabled = false;

var session = context.Users.Include("Sessions").First().Sessions.First();
session.LastActivityTime = DateTime.Now;

context.ApplyCurrentValues("Sessions", session);

context.SaveChanges();
}
}

我从Sql事件探查器看到EF4生成了以下查询。
exec sp_executesql N'update [dbo].[Session]
set [LastActivityTime] = @0
where (([SessionID] = @1) and ([RowVersion] = @2))
select [RowVersion]
from [dbo].[Session]
where @@ROWCOUNT > 0 and [SessionID] = @1',N'@0 datetime2(7),@1 int,@2 binary(8)',@0='2011-06-20 09:43:30.6919628',@1=1,@2=0x00000000000007D7

下一个查询很奇怪。
    exec sp_executesql N'declare @p int
update [dbo].[User]
set @p = 0
where (([UserID] = @0) and ([RowVersion] = @1))
select [RowVersion]
from [dbo].[User]
where @@ROWCOUNT > 0 and [UserID] = @0',N'@0 int,@1 binary(8)',@0=1,@1=0x00000000000007D3

最佳答案

不知道这是否仍然对您有问题,但这是MS http://support.microsoft.com/kb/2390624的修复程序

关于entity-framework - EF4-更新[Table]设置@p = 0,其中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6232185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com