2017-05-26 178 views
1

我有一個ASP.NET MVC5項目與實體框架。我有人(Pajtas班),這些人分組(每個組都有一個唯一的編號)。用戶可以編輯人員的信息,但前提是用戶必須獲得該人員所在的組的許可。實體框架(ASP.NET MVC)中的System.NotSupportedException

每個用戶都有一個IfiAdatlap對象,而IfiAdatlap對象具有編號組的權限。所以,我有一個簡單的permisison類:

 public class CsoportHozzaferes 
     { 
      [Required] 
      [Key] 
      [Column(Order = 1)] 
      public int Csoport { get; set; } 
      [Required] 
      [Key] 
      [Column(Order = 2)] 
      public virtual IfiAdatlap IfiAdatlap { get; set; } 
     } 

在我的控制器我有一個函數來檢查當前用戶的IfiAdatlap對象有權在該人是其信息的用戶想編輯的組。首先,我得到當前用戶的ApplicationUser對象(user),比我試圖獲得用戶有權檢查該用戶的組號(pajtas.Csoport)在該列表中的組的列表(csoportok)還是不。

private void PajtasHozzaferesCheck(Pajtas pajtas) 
     { 
      var userName = User.Identity.Name; 
      var user = db.Users.FirstOrDefault(x => x.UserName == userName); 
      var csoportok = db.CsoportHozzaferesek.Where(h => h.IfiAdatlap != null && h.IfiAdatlap == user.Adatlap).Select(csh => csh.Csoport).ToList(); 
      if (!(pajtas.Csoport != null && csoportok.Contains((int)pajtas.Csoport))) 
      { 
       var tanfolyamok = db.TanfolyamHozzaferesek.Where(h => h.IfiAdatlap != null && h.IfiAdatlap == user.Adatlap).Select(tfh => tfh.Tanfolyam).ToList(); 
       var tfosztalyok = db.TanfolyamHozzaferesek.Where(h => h.IfiAdatlap != null && h.IfiAdatlap == user.Adatlap).Select(tfh => tfh.Osztaly).ToList(); 
       if (!(pajtas.TanfolyamOsztaly != null && pajtas.TanfolyamSorszam != null && tanfolyamok.Contains((int)pajtas.TanfolyamSorszam) && tfosztalyok.Contains((TanfolyamOsztaly)pajtas.TanfolyamOsztaly) && tanfolyamok.IndexOf((int)pajtas.TanfolyamSorszam) == tfosztalyok.IndexOf((TanfolyamOsztaly)pajtas.TanfolyamOsztaly))) 
       { 
        var tanfvez = db.TanfolyamvezetesHozzaferesek.Where(h => h.IfiAdatlap != null && h.IfiAdatlap == user.Adatlap).Select(tfvh => tfvh.Tanfolyam).ToList(); 
        if (!(pajtas.TanfolyamSorszam != null && tanfvez.Contains((int)pajtas.TanfolyamSorszam))) 
        { 
         if (!(User.IsInRole("Nevelo") || User.IsInRole("Admin"))) 
         { 
          //nincs jogosultság 
          throw new HttpException((int)System.Net.HttpStatusCode.Forbidden, "Hozzáférés megtagadva"); 
         } 
        } 
       } 
      } 
     } 

但我得到一個異常的線var csoportok = ...

System.NotSupportedException: 'Unable to create a constant value of type 'Ifi.Models.Adatlap'. Only primitive types or enumeration types are supported in this context.' 

感謝您的幫助!

回答

2

我相信Adaplap就是條件使用ID而不是比較的情況下,如一個entity.Change:

.Where(h => h.IfiAdatlap != null && h.IfiAdatlap.Id == user.Adatlap.Id) 
2

問題是h.IfiAdatlap == user.Adatlap。因爲這是一個複雜的類型,所以不會被接受,因爲英孚不知道如何進行比較。您需要比較ID,例如h.IfiAdatlap.Id == user.Adatlap.Id