Я пытаюсь переключить уникальные идентификаторы между двумя объектами. Мое текущее решение работает, но далеко не красиво. Сначала я установил одно имя пользователя на «temp», чтобы не было совпадений в именах пользователей. После этого я переключаю их.
public void SwitchUsernames(Guid personIdOld, Guid personIdNew)
{
// Get accounts
var personOld = GetAccount(personIdOld);
var personNew = GetAccount(personIdNew);
// switch usernames
string usernamePersonOld = personOld.username;
string usernamePersonNew = personNew.username;
try
{
personOld.SetUsername("Temp");
Context.SaveChanges();
}
catch (Exception) { throw; }
try
{
personNew.SetUsername(usernamePersonOld);
Context.SaveChanges();
}
catch (Exception)
{
personOld.SetUsername(usernamePersonOld);
Context.SaveChanges();
throw;
}
try
{
personOld.SetUsername(usernamePersonNew);
Context.SaveChanges();
}
catch (Exception)
{
personOld.SetUsername(usernamePersonOld);
Context.SaveChanges();
personNew.DomainAccounts.SetUsername(usernamePersonNew);
Context.SaveChanges();
throw;
}
}
Блоки trycatch предназначены для отката всего в случае сбоя. Если я не сохраняю контекст после каждого изменения, он потерпит неудачу. Я действительно хотел бы, чтобы это было намного чище, но я не знаю, есть ли способ. Я здесь, чтобы учиться, поэтому, пожалуйста, просветите меня.