gpt4 book ai didi

asp.net - 如果 saveChangesAsync 中的多个添加之一失败,是否添加其他人?

转载 作者:行者123 更新时间:2023-12-05 03:09:18 26 4
gpt4 key购买 nike

我的应用程序中有这个功能。如果 Phrase 的插入失败,那么有人可以告诉我是否仍然添加了 Audit 条目吗?如果是这种情况,那么有没有一种方法可以将这些打包成一个可以回滚的事务。

此外,如果它失败了,我能否捕获它,然后仍然让过程异常退出?

    [Route("Post")]
[ValidateModel]
public async Task<IHttpActionResult> Post([FromBody]Phrase phrase)
{

phrase.StatusId = (int)EStatus.Saved;
UpdateHepburn(phrase);
db.Phrases.Add(phrase);
var audit = new Audit()
{
Entity = (int)EEntity.Phrase,
Action = (int)EAudit.Insert,
Note = phrase.English,
UserId = userId,
Date = DateTime.UtcNow,
Id = phrase.PhraseId
};
db.Audits.Add(audit);
await db.SaveChangesAsync();
return Ok(phrase);
}

最佳答案

I have this function in my application. If the insert of Phrase fails then can someone tell me if the Audit entry still gets added?

DbContext 上完成所有修改后,您通过调用 await db.SaveChangesAsync(); 一次正确的方式编写了代码。

您的问题的答案是:不,如果 Phrase 失败,则不会添加 Audit。因为您在对实体完成所有操作后调用 await db.SaveChangesAsync();, Entity Framework 将生成所有必需的 SQL 查询并将它们放入单个 SQL 事务中,从而使整个查询成为对数据库的原子操作。如果生成的查询之一,例如Audit生成的查询失败,然后事务将被回滚。因此,对您的数据库所做的所有修改都将被删除,因此 Entity Framework 将使您的数据库处于一致状态。

关于asp.net - 如果 saveChangesAsync 中的多个添加之一失败,是否添加其他人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43567131/

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