拥有OAuth提供程序;实体类型IdentityUser不是当前上下文模型的一部分

本文关键字:上下文 模型 一部分 IdentityUser OAuth 程序 类型 实体 拥有 | 更新日期: 2023-09-27 18:05:29

UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),
    Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
    AuthorizeEndpointPath = new PathString("/api/AccountOwin/ExternalLogin"),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
    AllowInsecureHttp = true
};

IdentityUser,UserStore从其中产生实体框架

我想使用我的数据库而不是本地db,我从本地db表和生成"生成"脚本我在我的自定义数据库中创建了它们,但是当我在下面一行更改db上下文时:

UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyCustomDBEntities()));

Where MyCustomDBEntities是我的自定义数据库在实体框架(edmx)我得到以下错误:"实体类型IdentityUser不是当前上下文模型的一部分"

我做错了什么?我应该创建自己的Usermanager吗?

public class MyCustomDBEntities : IdentityDbContext<IdentityUser>
    {
        public MyCustomDBEntities()
            : base("name=ConnectionStringName")
        {
        }
    }

拥有OAuth提供程序;实体类型IdentityUser不是当前上下文模型的一部分

我怀疑问题是与您的连接字符串。首先,上下文的构造函数只需要有连接字符串的名称,因此您可以将其更改为:

public MyCustomDBEntities() : base("ConnectionStringName") { }

其次,这可能只是你在发布之前编辑你的代码,该名称需要与配置文件中的名称匹配:

<add name="ConnectionStringName" providerName="System.Data.SqlClient" connectionString="...." />

最后,你可能需要改变你的连接字符串使用标准的SQL Server格式,而不是EF格式。所以它可能看起来像这样:

Data Source=LNODA-PC;Initial Catalog=Dashboard;Persist Security Info=True;User Id=XXXX;Password=XXXXXX;MultipleActiveResultSets=True;
相关文章: