gpt4 book ai didi

database - LINQ RefreshMode 是如何工作的?

转载 作者:太空狗 更新时间:2023-10-30 01:42:47 24 4
gpt4 key购买 nike

如果发生冲突,我需要用我的更改覆盖数据库中的值。我在 MSDN 上找到了以下文章,其中解释了如何使用 RefreshMode 解决冲突:

http://msdn.microsoft.com/en-us/library/system.data.linq.refreshmode.aspx

我认为 KeepCurrentValues 对我的要求很有意义,我还找到了这个带有此模式示例的页面:

http://msdn.microsoft.com/en-us/library/bb399421.aspx

然而,当我实现这个时,数据库中的值总是覆盖我的更改。我尝试将 RefreshMode 更改为 OverwriteCurrentValues 和 KeepChanges,并且每次都保存数据库中的值。我的方法是在 VisualStudio 中处于 Debug模式时手动更改数据库中的值。 VS中的代码是:

[MyDataContext] db = new [MyDataContext]();
try
{
[MyLINQType] old = (from o in db.[MyLINQType] where o.ID=1 select o).Single();
old.IntField = 55;

// This is where I change the IntField value manually in the database in
// debug mode to generate the conflict.
db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException)
{
db.ChangeConflicts.ResolveAll(RefreshMode.KeepCurrentValues);
}

我知道会出现冲突,但每次,无论我如何更改 RefreshMode,值 55 都不会保存,我在数据库中手动进行的更改会保留。是否有一些技巧可以达到预期的效果?我一开始尝试从代码内部产生冲突,但也没有按预期工作。也许我不明白 RefreshMode 应该如何工作。欢迎任何想法。

最佳答案

您只需要再次调用 SubmitChanges...

catch (ChangeConflictException)
{
db.ChangeConflicts.ResolveAll(RefreshMode.KeepCurrentValues);
db.SubmitChanges();
}

冲突解决方法决定了 DataContext 的状态,而不是底层数据库。

KeepCurrentValues意味着保留所有值,因为它们当前在 DataContext 中,这意味着下一次调用 SubmitChanges 将保存用户所做的任何更改,但它也会覆盖当前用户加载数据后其他用户所做的任何更改。

KeepChanges表示仅保留自加载到 DataContext 后更改的值,这意味着下一次调用 SubmitChanges 将保存用户所做的任何更改,并将保留其他用户所做的任何更改。而且,如果另一个用户更改了与当前用户相同的值,则当前用户的更改将覆盖它。

OverwriteCurrentValues 表示使用当前数据库值更新 DataContext,这意味着当前用户所做的所有更改都将被丢弃。

关于database - LINQ RefreshMode 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483672/

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