gpt4 book ai didi

sql - 使用 LINQ 的简单编辑/更新操作。我的代码是不是有点错误?

转载 作者:行者123 更新时间:2023-12-01 23:35:30 25 4
gpt4 key购买 nike

考虑一个简单的编辑/更新代码:

public ActionResult Edit(int id)
{
return View(db.Foos.Single(x => x.Id == id));
}

public ActionResult Update(Foo changed)
{
Foo foo = db.Foos.Single(x => x.Id == changed.Id);
foo.P1 = changed.P1;
db.SubmitChanges();
}

我实际上想在这里做的是发送:

UPDATE [dbo].[Foos]
SET [P1] = @p1
WHERE ([Id] = @p0)

但实际上我们最终调用了 2 个数据库:

// Read current db object
SELECT [t0].[Id], [t0].[P1]
FROM [dbo].[Foos] AS [t0]
WHERE [t0].[Id] = @p0

// Submit changes
UPDATE [dbo].[Foos]
SET [P1] = @p2
WHERE ([Id] = @p0) AND ([P1] = @p1)

UPDATE 查询确保对象自上次查询以来没有改变,但实际上这在我们的上下文中是无用的。实际上,数据库可以在用户提交表单之前更改,我们的代码不会检测到任何问题。但是,如果 Foo 在我们在 Update 操作中读取之后但在 SubmitChanges 之前发生了更改,我们将收到 ChangeConflictException(这会造成混淆)。

为了使此类更新(检查原始数据库值)有意义,我们应该通过 HTTP 来回发送原始 Foo 对象。

public ActionResult Update(Foo original, Foo changed)
{
Foo foo = db.Foos.Attach(changed, original);
db.SubmitChanges();
}

在这种情况下,我们将在用户输入值时检测数据库中的变化。

但是如果我不关心并发变化,原来的 Update 方法是不是看起来不对?

最佳答案

这是 Linq 检查数据库并发性。您可以通过在列上设置此属性来抑制此行为:

[Column(... UpdateCheck=UpdateCheck.Never)]

此处有更多详细信息:http://msdn.microsoft.com/en-us/library/bb399373.aspx .

关于sql - 使用 LINQ 的简单编辑/更新操作。我的代码是不是有点错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965550/

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