Ho un'applicazione web ASP.NET MVC4, con EntityFramework per l'accesso ai dati. Nell'applicazione ho due repository come segue (questo è solo un esempio, non il mio vero codice):
public class CustomerRepository
{
ICustomerContext _db;
public CustomerRepository(ICustomerContext db)
{
_db = db;
}
...
public void DeactivateCustomer(int customerId)
{
var customer = _db.Customers.Single(x => x.CustomerId == customerId);
customer.IsActive = false;
_db.SaveChanges();
}
}
E
public class ItemRepository
{
IItemContext _db;
public ItemRepository(IItemContext db)
{
_db = db;
}
...
public void DeactivateItem(int itemId)
{
var item = _db.Items.Single(x => x.ItemId == itemId);
item.IsActive = false;
// The problem is here
new CustomerRepository().DeactivateCustomer(item.CustomerId);
_db.SaveChanges();
}
}
Il ItemRepository
vuole utilizzare la logica di disattivazione del Cliente da CustomerRepository
senza copiare il codice, o accoppiare entrambi i repository come nell'esempio sopra.
Voglio anche eseguire entrambe le azioni (disattivando l'elemento e disattivando il cliente) in una transazione (forse una chiamata a SaveChanges()
)
Esiste uno schema di progettazione in grado di soddisfare questi requisiti?