Я создал абстрактный класс контроллера приложения, от которого происходят мои контроллеры (как описано в следующем статья)
Ниже приведен пример того, как выглядит мой код.
public abstract class ApplicationController : Controller
{
private ProjectDataContext datacontext = new ProjectDataContext();
protected ProjectDataContext DataContext
{
get { return datacontext; }
}
public ApplicationController()
{
ViewData["OpenTasks"] = DataContext.Tasks.Where(t => t.UserId == this.UserId).Count();
}
}
Это приводит к следующей ошибке, которая, как я определил, связана с лямда-выражением "Где":
Если у контроллера нет фабрики контроллеров, убедитесь, что у него есть открытый конструктор без параметров.
эта ошибка возникает независимо от того, каким способом я пишу запрос LINQ, и единственный способ скомпилировать приложение - удалить предложение «Where» следующим образом.
ViewData["OpenTasks"] = DataContext.Tasks.Count();
любые идеи, в чем проблема или как ее решить, поскольку мне нужно выполнить запрос против пользователя и не возвращать все записи.
заранее спасибо





Может случиться так, что при вызове конструктора происходит сбой, потому что UserId (this.UserId) еще не инициализирован.
Попробуйте это вместо использования конструктора: -
public abstract class ApplicationController : Controller
{
private ProjectDataContext datacontext = new ProjectDataContext();
protected ProjectDataContext DataContext
{
get { return datacontext; }
}
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(RequestContext);
ViewData["OpenTasks"] = DataContext.Tasks.Where(t => t.UserId == this.UserId).Count();
}
}
Вполне вероятно, что текущий идентификатор пользователя зависит от RequestContext.
Показать реализацию свойства UserId