我正在尝试重新组合选择,然后在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();
}
}
}
即使事务中包含选择,此代码也会产生两次往返。