部署到新的IIS服务器后,LINQ to Entities错误

时间:2015-02-14 00:47:37

标签: c# asp.net asp.net-mvc linq iis

我正在开发一个WebAPI站点,它包含一些在以前的服务器上运行的登录逻辑,以及在开发/本地主机上,但在将其部署到新的IIS服务器(之前的服务器崩溃,不可恢复)之后无法工作。

现在配置数据库和Web服务器是服务器上的同一个VM,因此我们再次没有这个裸机问题。新服务器是2012 R2运行最新的IIS更新。登录过程或我们的网站工作正常,但现在我们收到此错误:

Exception Details: System.NotSupportedException: Only parameterless constructors and initializers are supported in LINQ to Entities

堆栈跟踪引导我使用此代码:

protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
    if (!Request.IsAuthenticated) return;

    using (var db = new PerformanceSecurityRoleContext())
    {
        var user = User as ClaimsPrincipal;
        var userEntry = db.Users.FirstOrDefault(x => x.IdSid.ToLower().Equals(user.Identity.Name.ToLower()));
        var roles = userEntry == null 
            ? FindRolesByGroups(db, User as WindowsPrincipal)
            : FindRolesByUser(db, userEntry);

        if(roles == null) return;
        foreach (var role in roles)
        {
            var id = new ClaimsIdentity();
            id.AddClaim(new Claim(ClaimTypes.Role, role.Name));
            ClaimsPrincipal.Current.AddIdentity(id);
        }
    }
}

private static IEnumerable<Role> FindRolesByUser(PerformanceSecurityRoleContext db, User user)
{
    return db.UserRoles.Where(x => x.UserId.Equals(user.Id)).Select(x => x.Role);
}

private static IEnumerable<Role> FindRolesByGroups(PerformanceSecurityRoleContext db, WindowsPrincipal user)
{
    var groupList = (db.Groups.Select(g => new {g, name = new SecurityIdentifier(g.Name)})
        .Where(@t => user.IsInRole(@t.name))
        .Select(@t => @t.g)).ToList();

    var rolesList = new List<Role>();
    foreach (var g in groupList)
    {
        rolesList.AddRange(g.GroupRoles.Select(x => x.Role));
    }
    return rolesList.Distinct();
}

特别是,似乎是这一行:

var groupList = (db.Groups.Select(g => new {g, name = new SecurityIdentifier(g.Name)})
    .Where(@t => user.IsInRole(@t.name))
    .Select(@t => @t.g)).ToList();

为什么它在localhost和以前的服务器上工作但现在不工作?如果我之前很幸运,我需要打好具体的电话,我需要学习一些东西,但在我看来是一个配置问题。我花了几个小时寻找答案,但我一定是在问错误的问题。

0 个答案:

没有答案