gpt4 book ai didi

.net - LINQ to SQL 并发冲突 - 看起来像是带有正确行版本控制的干净附加

转载 作者:行者123 更新时间:2023-12-01 13:09:34 27 4
gpt4 key购买 nike

我正在尝试让 LINQ to SQL 持久化对附加对象的更改,其中支持表有一个 DateTime 列,我认为应该用于行版本控制,如所述here .

表格如下所示:

CREATE TABLE [dbo].[client](
[client_id] [int] IDENTITY(1,1) NOT NULL,
[client_address1] varchar(100) NULL,
/* snip */
[modified_date] datetime NOT NULL,
CONSTRAINT [PK_CLIENT] PRIMARY KEY CLUSTERED ([client_id] ASC) )

modified_date 属性的相关属性在 DBML 设计器中设置如下:
Auto Generated Value: TrueAuto-Sync: AlwaysNullable: FalsePrimary Key: FalseRead Only: FalseServer Data Type: DateTimeSource: modified_dateTime Stamp: TrueUpdate Check: Never

And the resulting attributes on the declaration of the modified_date property look right as far as I can tell:
[Column(Storage="_modified_date", AutoSync=AutoSync.Always, 
DbType="DateTime", IsDbGenerated=true, IsVersion=true,
UpdateCheck=UpdateCheck.Never)]

尝试将更改保存到客户端的过程如下所示:
var c = new client { client_id = idOfClientToSave };

c.client_address1 = uxAddress1.Text;

// The DataContext is initialized in the constructor
// of ClientDataAccess
using (var ClientData = new ClientDataAccess())
{
ClientData.SaveClient(c);
}

最后,尝试提交更改的方法如下所示:
public int SaveClient(client c)
{
c.modified_date = DateTime.Now.ToUniversalTime();

if (c.client_id == 0)
{
_db.GetTable<client>().InsertOnSubmit(c);
}
else
{
_db.GetTable<client>().Attach(c, true);
}
try
{
_db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException)
{
foreach (var con in _db.ChangeConflicts)
{
con.Resolve(RefreshMode.OverwriteCurrentValues);
}
throw;
}
}

但是 _db.SubmitChanges(ConflictMode.ContinueOnConflict) 仍然抛出 ChangeConflict 异常(与 _db.SubmitChanges() 一样)。我看不出附加对象是如何源自当前 DataContext 的,因为它是自己实例化的,并且在附加之前没有从 DataContext 中检索到。

如有任何帮助,我们将不胜感激。

最佳答案

尝试在新版本后面加载原始对象。

else   
{
_db.GetTable<client>().Attach(c, true);
_db.Refresh(RefreshMode.KeepCurrentValues, c);
}

我从 this article 学到了这项技术,在部分:更新(和删除)操作的并发模式。

关于.net - LINQ to SQL 并发冲突 - 看起来像是带有正确行版本控制的干净附加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/226374/

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