【问题标题】:If one of the multiple adds in a saveChangesAsync fails do the others get added?如果 saveChangesAsync 中的多个添加之一失败,是否会添加其他?
【发布时间】:2017-04-23 03:42:50
【问题描述】:

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

另外,如果它失败了,我可以捕捉到这个然后仍然有异常退出过程吗?

    [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);
    }

【问题讨论】:

    标签: asp.net entity-framework asp.net-web-api


    【解决方案1】:

    我的应用程序中有这个功能。如果插入 Phrase 失败 那么有人可以告诉我 Audit 条目是否仍然被添加?

    在对DbContext 进行所有修改后,仅调用一次await db.SaveChangesAsync();,您就以正确的方式编写了代码。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      相关资源
      最近更新 更多