2013-12-11 2 views
0

Я пытаюсь настроить защиту так, чтобы только контент-владелец мог видеть только его содержимое. Кроме того, Менеджер должен иметь возможность просматривать все отчеты. Ниже приведен фрагмент кода, который дал мне следующую ошибку.Невозможно создать постоянное значение типа «Tasker.Models.TaskOwner». В этом контексте поддерживаются только примитивные типы или типы перечислений

Ошибка: не удалось создать постоянное значение типа «Tasker.Models.TaskOwner». В этом контексте поддерживаются только примитивные типы или типы перечислений.

Код:

public ActionResult Index() 
{ 
    var owner = db.TaskOwners 
.Include(x => x.DirectReports) 
.Where(x => x.UserId==(User.Identity.Name.ToLower())).First(); 

    IQueryable<Task> tasks; 

    if (owner.DirectReports.Count > 0) 
    { 
     tasks = db.Tasks 
      .Include(t => t.Category) 
      .Include(t => t.Priority) 
      .Include(t => t.Status) 
      .Include(t => t.Owner) 
      .Include(t => t.Parent) 
      .Where(t => owner.DirectReports.Contains(t.Owner)); 
    } 
    else 
    { 
     tasks = db.Tasks 
      .Include(t => t.Category) 
      .Include(t => t.Priority) 
      .Include(t => t.Status) 
      .Include(t => t.Owner) 
      .Include(t => t.Parent) 
      .Where(t => t.Owner == owner); 
    } 

    return View(tasks.ToList()); 

Любые мысли, предложения будут оценены. Благодаря!

+0

Какая строка кода вызывает ошибку? – Servy

+0

Последняя строка кода: return View (tasks.ToList()); – user3075848

ответ

0

Возможно, он жалуется, что не понимает User.Identity.Name.ToLower(), когда пытается сгенерировать SQL. Попробуйте это вместо

string userId = User.Identity.Name.ToLower(); 
var owner = db.TaskOwners 
    .Include(x => x.DirectReports) 
    .Where(x => x.UserId == userId).First(); 
+0

Привет, Майк, я пробовал это, но я все равно получаю ту же ошибку. – user3075848

+0

Хм, может быть, это не нравится, когда владелец находится в Линке. Попробуйте сделать int ownerId = owner.Id, а затем измените свои инструкции Where на .Where (t => owner.DirectReports.Any (d => d.OwnerId == t.OwnerId)) и .Where (t> t .OwnerId == ownerId); –

Смежные вопросы

 Смежные вопросы