【问题标题】:System.NotSupportedException in Entity Framework (ASP.NET MVC)实体框架中的 System.NotSupportedException (ASP.NET MVC)
【发布时间】:2017-05-26 23:45:29
【问题描述】:

我有一个带有实体框架的 ASP.NET MVC5 项目。我有一些人(Pajtas class)分组(每个组都有一个唯一的编号)。用户可以编辑人员的信息,但前提是用户有权访问该人员所在的组。

每个用户都有一个IfiAdatlap 对象,IfiAdatlap 对象拥有编号组的权限。所以我有一个简单的权限类:

        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),然后我尝试获取用户有权检查该人的组号(@ 987654329@) 是否在此列表中。

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.'

感谢您的帮助!

【问题讨论】:

    标签: asp.net-mvc entity-framework


    【解决方案1】:

    我认为Adaplap 是一个实体。使用 id 更改 where 条件而不是比较实例,例如:

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

    【讨论】:

      【解决方案2】:

      问题是h.IfiAdatlap == user.Adatlap。因为这是一个复杂类型,所以它不会被接受,因为 EF 不知道如何进行比较。您需要比较 id,例如 h.IfiAdatlap.Id == user.Adatlap.Id

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-22
        • 2020-05-26
        • 2010-09-25
        • 1970-01-01
        • 2012-10-18
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多