我有一個這樣的物體:
public class Notification
{
public int Id { get; set; }
public bool IsReminderActive { get; set; }
public bool IsInvitationActive { get; set; }
public int ContractId { get; set; }
public bool IsActive { get; set; }
}
如果我想更新一個條目或創建一個新條目,我正在嘗試這樣的事情:
public async Task<bool> Post(Notification notificationEmail)
{
try
{
if (!_context.Notification.Any(x => x.ContractId == notificationEmail.ContractId))
{
_logger.LogInformation($"Creating new Notification for contract {notificationEmailType.ContractId}");
_context.Notification.Add(notificationEmail);
}
else
{
var update = _context.Notification.First(x => x.ContractId == notificationEmail.ContractId);
update.IsInvitationActive = notificationEmail.IsInvitationActive;
update.IsReminderActive = notificationEmail.IsReminderActive;
_logger.LogInformation($"Updating Notification for contract {notificationEmail.ContractId}");
_context.Notification.Update(update);
}
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
_logger.LogError("Error trying to create/update Notification", ex);
return false;
}
return true;
}
我做了這樣的更新部分,因為如果我嘗試使用 notificationEmail 變數更新條目,我會遇到 ContractId 重復鍵的錯誤。
SqlException:無法在具有唯一索引“IX_Notification_ContractId”的物件“dbo.Notification”中插入重復的鍵行。重復鍵值為 (4)。
有更好的方法來撰寫更新代碼嗎?
uj5u.com熱心網友回復:
是的,您不需要呼叫Update(),因為您在使用_context.Notification.First. 最初嘗試獲取跟蹤的實體,然后在找到時更新它。
public async Task<bool> Post(Notification notificationEmail)
{
try
{
var notification = _context.Notification.FirstOrDefault(x => x.ContractId == notificationEmail.ContractId);
if (notification == null)
{
_logger.LogInformation($"Creating new Notification for contract {notificationEmailType.ContractId}");
_context.Notification.Add(notificationEmail);
}
else
{
notification.IsInvitationActive = notificationEmail.IsInvitationActive;
notification.IsReminderActive = notificationEmail.IsReminderActive;
_logger.LogInformation($"Updating Notification for contract {notificationEmail.ContractId}");
}
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
_logger.LogError("Error trying to create/update Notification", ex);
return false;
}
return true;
uj5u.com熱心網友回復:
首先你應該將Update代碼移動到一個PUT或一個PATCH請求上,然后你不需要在創建新記錄時將 id 傳遞給帖子
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/459587.html
上一篇:物體框架一對多關系配置
下一篇:物體型別List需要定義一個主鍵
