в типичном приложении MVC3 с моделью EF каждый контроллер создает свою собственную копию контейнера модели.это означает, что если бы я должен был создать класс в другом файле и ему требовался доступ к модели, ему нужно было бы создать собственный контейнер.
Примите во внимание следующее:
namespace X.Web.Controllers
{
public class TestController : Controller
{
EFContainer db = new EFContainer();
public ActionResult Whatever()
{
User u = db.Users.Find(3);
...
}
если бы я хотел абстрагировать мою выборку пользователя в классе Auth
, то ему пришлось бы создавать свои собственные db
, поскольку у него нет доступа к контроллеру - все нормально, пока контроллер не захочет внести изменения ввозвращаемый объект:
public ActionResult Whatever()
{
User u = Auth.GetUser();
u.Name = "ekkis";
db.SaveChanges();
...
}
, так как пользователь в этой точке принадлежит к другому контексту ... так что либо я должен поделиться своим db
с Auth
, либо, возможно, мне придется сделать дебильныйдвойной поиск:
public ActionResult Whatever()
{
int id = Auth.GetUserId();
User u = db.Users.Find(id);
u.Name = "ekkis";
db.SaveChanges();
...
}
Каков рекомендуемый способ борьбы с этим?