Ich habe in ein bisschen ein Problem mit EF laufen für dieses Problem für die beste Praxis suchen:Arbeitseinheit, Entity Framework DbContext Scope
public void TestEntityFramework_UOWImplementation()
{
using (UnitOfWorkInventory uow = new UnitOfWorkInventory())
{
IMaterialRepository repos = new MaterialRepository(uow);
Material mat = GetMaterial("Mikes Material", 1);
mat.CostPrice = 20;
repos.InsertOrUpdate(mat);
uow.Commit();
}
}
private Material GetMaterial(string sku, int clientId)
{
IMaterialRepository repos = new MaterialRepository(new UnitOfWorkInventory();
return repos.Find(sku, clientId);
}
Im TestEntityFramework_UOWImplementation() -Methode, seine feinen, i Rufen Sie einen Bereich für meine Arbeitseinheit an .. und erstellen Sie darin ein Repository.
Aber wenn ich willMaterials() wie unten .. Ich habe keinen Zugriff auf die Arbeitseinheit oder das Repository, es sei denn, ich übergebe es tatsächlich als Parameter! Das ist eindeutig nicht besonders nett.
Wie umgehen die Leute dieses Problem?
Vielen Dank im Voraus!
Neil
Sollte nicht 'GetMaterial' eine Instanzmethode in der sein 'MaterialRepository' Klasse? –
das ist ein guter Punkt! :) aber sag, es gäbe einen Fall, in dem du ein Where() machen würdest ... ich nehme an, diese wären auch im Repo. Vielen Dank! Jetzt, wo ich es aufgeschrieben sehe, ist es offensichtlich :) –
Tatsächlich, sagen, es gab mehrere Repo-Abfragen erforderlich. Glauben Sie nicht, dass es jemals einen Fall geben würde, in dem die Abfrage außerhalb des Repos erfolgt? Oder sagen, ich hatte eine Methode namens CalculateMaterialPrices(), die eine Liste von Materialien benötigt, um zu berechnen.Würden Sie die repo GetMaterials() -Methode in der TestEntityFramework_UOWImplementation() - Methode oder in der CalculateMaterialPrices() -Methode aufrufen, wenn Letzteres, wie würden Sie auf den Repo zugreifen? oder bin ich hier nicht auf dem richtigen Weg! –