ho incontrato un po 'di un problema con EF cercando la migliore prassi per questo problema:unità di lavoro, Entity Framework DbContext Ambito
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);
}
Nel metodo TestEntityFramework_UOWImplementation(), la sua fine, i call crea un ambito per la mia unità di lavoro .. e crea un repository al suo interno.
Ma quando voglio ottenereMaterials() come di seguito .. Non ho accesso all'unità di lavoro o al repository, a meno che non lo passi effettivamente come parametro! Questo chiaramente non è particolarmente bello.
Come si aggira questo problema ??
Grazie in anticipo!
Neil
caso non 'GetMaterial' essere un metodo di istanza nella 'Classe MaterialRepository'? –
questo è un buon punto! :) ma diciamo che c'era un caso in cui si vorrebbe fare un Where() ... suppongo che anche questi sarebbero nel repository. Grazie! ora che lo vedo scritto in modo ovvio :) –
In realtà, diciamo che c'erano diverse richieste di richieste di risarcimento. non credi che ci sarebbe mai un caso in cui l'interrogazione sarebbe fatta al di fuori del repo? O dire che avevo un metodo chiamato CalculateMaterialPrices() che necessitava di un elenco di materiali da calcolare.Chiameresti il metodo Reper GetMaterials() nel metodo TestEntityFramework_UOWImplementation() o nel metodo CalculateMaterialPrices(), se quest'ultimo, come faresti ad accedere al repository? o non sono sulla strada giusta qui! –