Похоже, вам нужно прочитать о mvc3 и средах управления объектами, прежде чем писать кодирование и просить здесь о помощи по чему-то, что закодировано с использованием дурных практик.
Отвечая на ваши вопросы:
1- нет
2- не имеет смысла, поскольку ответ на 1
Сделайте все правильно, вот некоторая полезная документация: http://msdn.microsoft.com/en-us/library/ie/gg416514(v=vs.98).aspx
РЕДАКТИРОВАТЬ: Добавление некоторого явного исправления
Вы можете получить доступ к своему dbcontext из статического класса, например, так:
var context = DbProvider.CurrentDb;
Идея состоит в том, чтобы обращаться к вашей БД отсюда всегда: из ваших методов расширения и из действий вашего контроллера.
Тогда реализация DbProvider.CurrentDb будет выглядеть примерно так:
public static classDbProvider {
public static void Initialize(){
HttpContext.Current.ApplicationInstance.BeginRequest += CreateDb;
HttpConetxt.Current.ApplicationInstance.EndRequest += DisposeDb;
}
private static void CreateDb(object sender, EventArgs e) {
HttpContext.Items.Add("CurrentDb", new PbaDbEntities(););
}
private static void DisposeDb(object sender, EventArgs e)
{
Current.Dispose();
HttpContext.Items.Remove("CurrentDb");
}
public static PbaDbEntities CurrentDb{
get {
return (PbaDbEntities)HttpContext.Current.Items["CurrentDb"];
}
}
}
Как вы можете видеть, он будет создавать новый Db для каждого запроса, и он будет доступен ТОЛЬКО в этом запросе.Таким образом, ваша БД будет располагаться в конце каждого запроса.Этот шаблон называется Open-Session-in-View.
Наконец, вам нужно инициализировать DbProvider
, вызывающий метод Initialize()
в вашем файле Global.asax, в событии Application_start.
Надеюсь, это поможет.