首页 文章

实体框架核心2.1 IdentityUser IdentityDbContext <>获取IdentityUserLogin需要定义主键

提问于
浏览
1

我正在使用Entity Framework Core 2.1,我有一个类,

public class MyDbContext : IdentityDbContext<User>

User表是1和同一数据库的一部分 . 在Entity User类中,它被定义为

public class User : IdentityUser

当我运行并调用 userManager.FindByNameAsync(model.Username) 时,出现以下错误:

IdentityUser IdentityDbContext <>获取IdentityUserLogin需要定义主键 .

我用谷歌搜索并阅读某人关于可能的解决方案的文章 . 他说要使用以下构造函数

public DXContext(): base("name=DXContext")
{
     Database.SetInitializer<DXContext>(null);// Remove default initializer
     Configuration.ProxyCreationEnabled = false;
     Configuration.LazyLoadingEnabled = false;
}

在我的构造函数中,我传递连接器字符串如下

public MyDbContext()
{
}

// context being added and passing to connection string to use
public MyDbContext(DbContextOptions<ASLDbContext> options) : base(options)
{
   // Database.SetInitializer<MyDbContext>(null);            
}

我在SetInitializer方法上遇到如下构建错误:

DatabaseFacade不包含SetInitializer的定义 .

任何帮助将不胜感激,以解决 IdentityUserLogin 主键问题 .

1 回答

  • 0

    更新 startup.cs 用户 AddDefaultIdentity<User>() 而不是 AddDefaultIdentity<IdentityUser>

    public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
    
            services.AddDbContext<MyDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            services.AddDefaultIdentity<User>()
                .AddEntityFrameworkStores<MyDbContext>();
    
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }
    

    你的 DbContext 可以这么简单

    public class MyDbContext : IdentityDbContext<User>
    {
        public MyDbContext(DbContextOptions<MyDbContext> options)
            : base(options)
        {
        }
    }
    

    您的扩展用户类

    public class User : IdentityUser
    {
        public string SomeAdditionalProperty { get; set; }
    }
    

    _LoginPartial.cshtmlIdentityUser 更改为 User 类 .

    @inject SignInManager<User> SignInManager
    @inject UserManager<User> UserManager
    

    当从内置身份验证的全新项目开始时,这4个更改是使Identity在基础 IdentityUser 上使用扩展类( User )所需的全部内容 .

相关问题