Best practice per la gestione delle transazioni tramite Entity Framework

1

Sto sviluppando un'applicazione che utilizza Entity Framework per l'accesso ai dati. L'architettura dell'app in qualche modo mi piace qui sotto:

Come illustrato nel disegno, il servizio aziendale può essere utilizzato da un'app Web, da un'app clien o da un servizio Windows. Quello che sto cercando di progettare è che ciascuna richiesta di servizio dovrebbe essere eseguita in un'unica transazione. Sto usando l'iniezione di dipendenza per iniettare servizi su controller web API. Se utilizzo dbcontext con scope richiesta utilizzando il contenitore DI, eseguirà il lavoro per Web API, ma non funzionerà per le richieste di servizio provenienti direttamente dall'app CLI o dai servizi Windows.

Quali sono le best practice utilizzate per gestire le transazioni a livello di servizio con Entity Framework?

per es.

// Services
public class UserService
{
    private TaskService _taskService;
    private UserRepository _userRepository;

    public UserService(TaskService taskService, UserRepository userRepository)
    {
        this._taskService = taskService;
        this._userRepository = userRepository;
    }

    public void MarkInactive(int userId)
    {
        this._taskService.CloseAllPendingTasks(userId);
        this._userRepository.MarkInactive(userId);
    }
}

public class TaskService
{
    public void CloseAllPendingTasks(int userId)
    {
        ...
    }
}

// Consumer
// Scenario 1:
this._taskService.CloseAllPendingTasks(1);

// Scenario 2:
this._userService.MarkInactive(2);

Nell'esempio sopra, In caso di Scenario 1 , il servizio attività dovrebbe creare una nuova transazione per l'operazione. Mentre in Scenario 2 , il servizio utente dovrebbe creare una transazione e il servizio compito dovrebbe unirsi alla transazione già aperta.

    
posta Rumit Parakhiya 31.01.2018 - 06:50
fonte

0 risposte

Leggi altre domande sui tag