Je la pièce suivante wrapper transaction de base de données écrite:séparatrice EF du BLL
public class ExampleWrapper : IDisposable
{
public DbContextTransaction Transaction { get; set; }
public DcatContext DatabaseContext { get; set; }
public ExampleWrapper()
{
DatabaseContext = new someContext();
Transaction = DatabaseContext.Database.BeginTransaction();
}
public void Dispose()
{
Transaction.Dispose();
}
public void Commit()
{
Transaction.Commit();
}
public void RollBack()
{
Transaction.Rollback();
}
}
J'ai le code quelque chose de semblable à ce qui suit dans mon DAL:
public async Task<Object> Retrieve(string Id)
{
using (var context= new SomeContext())
{
return Context.Object.Find(id);
}
}
Je suis en train de garder la couche de gestion est distincte de toute dépendance Entity Framework et c'est la raison de la classe wrapper. Si je suis en train de faire une transaction de la BLL par exemple:
using(var wrapper = new ExampleWrapper())
{
//make calls to the DAL
something.Retrieve(Id)
}
Ma question est que je suis deux fois la Dbcontext Initialisation (ici en créant une transaction, ainsi que dans le DAL). Y a-t-il une suggestion quelconque d'entre vous pour savoir comment je peux faire cela mieux? . PS: Utiliser simplement récupérer dans une transaction à titre d'exemple.
Désolé ... Je suppose que je viens de mettre assez pour avoir l'idée. – kauschan
Je vous suggère de regarder ceci: https://github.com/mehdime/DbContextScope –
Dans la nomenclature plus actuelle, votre 'ExampleWrapper' est une * Unité de Travail * et' Retrieve' devrait être dans un * référentiel générique *. Maintenant, si vous recherchez cette combinaison, vous trouverez des exemples pour le faire correctement. –