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

时间:2018-09-07 16:37:12

标签: entity-framework-core asp.net-core-identity

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

search(terms: Observable<string>) {
    return terms.debounceTime(400)
      .distinctUntilChanged()
      .switchMap(term => this.searchEntries(term));
  }

  searchEntries(term) {
    return this.http
        .get(this.baseUrl + this.queryUrl + term)
        .map(res => res.json());
  }

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

public class MyDbContext : IdentityDbContext<User>

运行并致电public class User : IdentityUser 时,出现以下错误:

  

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

我搜索了某人的文章,并阅读了其解决方案的文章。他说要使用以下构造函数

userManager.FindByNameAsync(model.Username)

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

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

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

  

DatabaseFacade不包含SetInitializer的定义。

我们将为解决public MyDbContext() { } // context being added and passing to connection string to use public MyDbContext(DbContextOptions<ASLDbContext> options) : base(options) { // Database.SetInitializer<MyDbContext>(null); } 主键问题提供任何帮助。

1 个答案:

答案 0 :(得分: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在基础User上使用扩展类(IdentityUser)所需的全部操作。