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

Lór*_*óda 1 c# wif

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
};
Run Code Online (Sandbox Code Playgroud)

IdentityUser,UserStore来自哪个实体框架.

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

UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyCustomDBEntities()));
Run Code Online (Sandbox Code Playgroud)

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

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

public class MyCustomDBEntities : IdentityDbContext<IdentityUser>
    {
        public MyCustomDBEntities()
            : base("name=ConnectionStringName")
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

Dav*_*idG 6

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

public MyCustomDBEntities() : base("ConnectionStringName") { }
Run Code Online (Sandbox Code Playgroud)

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

<add name="ConnectionStringName" providerName="System.Data.SqlClient" connectionString="...." />
Run Code Online (Sandbox Code Playgroud)

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

Data Source=LNODA-PC;Initial Catalog=Dashboard;Persist Security Info=True;User Id=XXXX;Password=XXXXXX;MultipleActiveResultSets=True;
Run Code Online (Sandbox Code Playgroud)