如何修复 ApplicationUserManager 中的“LINQ to Entities 中不支持指定的类型成员‘UserId’”

Posted

技术标签:

【中文标题】如何修复 ApplicationUserManager 中的“LINQ to Entities 中不支持指定的类型成员‘UserId’”【英文标题】:How to fix "The specified type member 'UserId' is not supported in LINQ to Entities" in ApplicationUserManager 【发布时间】:2020-10-07 18:45:11 【问题描述】:

我目前正在开发一个较旧的 MVC 5 网站,该网站最初使用带有实体框架的代码优先生成的数据库。它已被转换为 db-first,重构,我现在正在删除旧的实体 c# 文件并用 ADO.net 的实体框架替换它们。

我目前遇到的问题是在登录时,我在 ApplicationUserManager(它派生自 UserManager(TUser, TKey))中点击了以下行:

var user = await UserManager.FindByEmailAsync(model.Email);

我收到以下错误: "LINQ to Entities 不支持指定的类型成员 'UserId'。仅支持初始化程序、实体成员和实体导航属性。"

镜像 db 表的 ApplicationUser 实体使用变量“Id”而不是“UserId”。我覆盖了有问题的方法并且它有效,但是每当我们需要使用 UserManager 时我不想这样做。所以我想我很困惑,UserManager 是否需要将变量命名为“UserId”?如果没有,我怎么能告诉它使用'Id'?

我认为我没有遗漏任何东西(比如在某处的 LINQ 语句中意外添加了“UserId”)。

【问题讨论】:

你玩过[Column("your db column name here")]这个属性吗?如果我理解正确,您需要将您的类属性映射到正确的数据库列名,对吗? 所以我使用 ADO.net 实体框架自动生成实体类。我不认为建议手动更改课程中的任何内容。也许我可以通过 edmx 以某种方式做到这一点? 【参考方案1】:

这就是我正在做的事情,到目前为止它似乎正在工作。在 ApplicationUserManager 的 Create 方法中,而不是

var manager = new ApplicationUserManager(new UserStore<ApplicationUser, ApplicationUserRole, int, ApplicationLogin, ApplicationRole, ApplicationClaim>(context.Get<AppDbContext>()));

我创建了一个派生自多个身份接口的 CustomUserStore:

var manager = new ApplicationUserManager(new CustomUserStore(context.Get<AppDbContext>()));

开头是这样的:

    public class CustomUserStore : IUserStore<ApplicationUser, int>,
    IUserEmailStore<ApplicationUser, int>,
    IUserRoleStore<ApplicationUser, int>,
    IUserPasswordStore<ApplicationUser, int>,
    IQueryableUserStore<ApplicationUser, int>,
    IUserLockoutStore<ApplicationUser, int>,
    IUserLoginStore<ApplicationUser, int>,
    IDisposable

    public IQueryable<ApplicationUser> Users => ctx.ApplicationUsers;

    private AppDbContext ctx  get; set; 

    public CustomUserStore(AppDbContext _ctx)
    
        ctx = _ctx;
    

然后我重写所有必要的方法。这不是我最初想要的,但现在可以了。

【讨论】:

以上是关于如何修复 ApplicationUserManager 中的“LINQ to Entities 中不支持指定的类型成员‘UserId’”的主要内容,如果未能解决你的问题,请参考以下文章

如何修复漏洞

如何修复WMI

PHP网站漏洞怎么修复 如何修补网站程序代码漏洞

如何修复这些漏洞? (npm audit fix 无法修复这些漏洞)

如何修复AppScan漏洞

如何在DOS环境下修复系统