如何使用EFCore选择和更新交易?

时间:2019-09-16 11:37:58

标签: c# asp.net-core entity-framework-core

我正在尝试重新组合选择,然后在EFCore事务中进行更新。 我要更新的实体具有一个ID(用于实体之间的关系)和一个GUID(用于隐藏我的可预测ID)。我不想使用Guid作为主键。

当用户要更新实体时,我仅从DTO获得了GUID,然后必须从数据库中检索ID以更新我的实体。目前,它可以通过选择和更新来工作,但是由于它要对数据库进行两次往返,因此尚未进行优化。您如何处理这种情况而不必两次往返?

这是我的代码atm:

public void Update(EmailTemplate emailTemplate, string username)
    {
        // Beginning of transaction
        using (var transaction = _uow.BeginTransaction())
        {
            try
            {
                // Retrieving id by guid
                emailTemplate.Id = _emailTemplateRepository.GetIdByGuid(emailTemplate.Guid);

                emailTemplate.ModifiedBy = username;
                emailTemplate.ModifiedDate = DateTime.Now;

                foreach (EmailTemplateTranslation ett in emailTemplate.EmailTemplateTranslations)
                {
                    // Updating childs
                    _emailTemplateTranslationRepository.Update(ett);
                }

                // Updating entity
                _emailTemplateRepository.Update(emailTemplate);

                // SaveChanges from UnitOfWork
                _uow.Commit();

                // Transaction commit
                transaction.Commit();
            }
            catch(Exception ex)
            {
                transaction.Rollback();
            }
        }
    }

即使事务中包含选择,此代码也会产生两次往返。

0 个答案:

没有答案