Логика данных на уровне фасадаC#

Место общения программистов C#
Ответить
Anonymous
 Логика данных на уровне фасада

Сообщение Anonymous »

У меня есть 2 БД со своими собственными проектами, службами данных и контроллерами.
У нас есть методы для них на уровне фасада, которые могут использовать любую БД.
У меня есть ситуация, когда мне нужно что-то записать в обе базы данных, но если на второй произойдет сбой, мне нужно выполнить откат на обеих.

Код: Выделить всё

public async Task DeactivateUser(UserDTO userDTO)
{
IDbContextTransaction dbOneTransaction = null;
IDbContextTransaction dbTwoTransaction = null;

try
{

dbOneTransaction = await this.dbOneService.DeactivateUser(mappedUser);
dbTwoTransaction = await this.dbTwoService.RemoveUserFromLists(userDTO.userId);

//Commit changes
if (dbOneTransaction != null)
{
await this._dbOneOperations.CommitTransactionAsync(dbOneTransaction);
}
if (dbTwoTransaction != null)
{
await this._dbTwoOperations.CommitTransactionAsync(dbTwoTransaction);
}
}
catch (DataServiceException ex)
{
//Rollback changes
if (dbOneTransaction != null)
{
await this._dbOneOperations.RollbackTransactionAsync(dbOneTransaction);
}
if (dbTwoTransaction != null)
{
await this._dbTwoOperations.RollbackTransactionAsync(dbTwoTransaction);
}

return false;
}

return true;
}
Я не вижу другого способа сделать это, поскольку это единственное место, где я могу выполнять обе операции. Я знаю, что фасад не должен выполнять логику, но есть ли лучший способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/792 ... cade-level
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»