如何使用PostgreSQL身份



我通过nuget添加了 Microsoft.AspNetCore.Identity.EntityFrameworkCore

启动

public void ConfigureServices(IServiceCollection services)
{
    //Add PostgreSQL support
    services.AddEntityFrameworkNpgsql()
        .AddDbContext<StoreDbContext>(options =>
            options.UseNpgsql(Configuration["Data:StoreDbContext:ConnectionString"]));
    // Add framework services.
    services.AddMvc();
    services.AddIdentity<PostgreApp.Models.User, IdentityRole>()
            .AddEntityFrameworkStores<StoreDbContext>()
            .AddDefaultTokenProviders();
    // Add our PostgreSQL Repository
    services.AddTransient<IStoreRepository, StoreRepository>();
}

在启动'配置中,我添加了以下:

app.UseIdentity();

这是我的代码:

 public class StoreDbContext: IdentityDbContext<User>
 {
    public StoreDbContext(DbContextOptions<StoreDbContext> options) : base(options)
    {
    }
    public DbSet<Store> Stores { get; set; }
    public DbSet<Company> Companies { get; set; }
    public DbSet<Department> Departments { get; set; }
    public DbSet<JobPost> JobPosts { get; set; }
    public DbSet<Candidate> Candidates { get; set; }
    public DbSet<CandidateCV> CandidateCVs { get; set; }
    public DbSet<Criterion> Criteria { get; set; }
    public DbSet<AssessmentStage> AssessmentStages { get; set; }
    public DbSet<AssessmentCriterion> AssessmentCriteria { get; set; }
    public DbSet<JobpostCv> JobpostCvs { get; set; }
}

然后我得到了:

system.invalidoperationException:类型文本的列ID具有 valuegenerated.onadd,但没有定义默认值 Microsoft.entityFrameWorkcore.migrations.NPGSQLMigrationsSQLGenerator.ColumnDefinition(String 架构,字符串表,字符串名称,类型clrtype,字符串类型, 无效1 unicode, Nullable 1最大长度,布尔划分,布尔值 无效的,对象默认值,字符串DefaultValuesql,字符串 ComputedColumnsql,Iannotabable Annotabable,Imodel模型, MigrationCommandListBuilder Builder) 在Microsoft.entityframeworkcore.migrations.migrationssqlgenerator.columndefinition(addColumnoperation) 操作,iModel型号,迁移CommandListBuilder Builder) 在microsoft.entityframeworkcore.migrations.migrationssqlgenerator.generate(createTableOperation) 操作,iModel型号,迁移CommandListBuilder Builder,Boolean 终止) 在microsoft.entityframeworkcore.migrations.migrationssqlgenerator.generate(createTableOperation) 操作,iModel型号,迁移CommandListBuilder Builder) 在Microsoft.entityframeworkcore.migrations.migrationssqlgenerator.generate(迁移配置) 操作,iModel型号,迁移CommandListBuilder Builder) 在microsoft.entityframeworkcore.migrations.migrationssqlgenerator.generate(ireadonlylist'1) 操作,iModel模型) 在microsoft.entityframeworkcore.migrations.internal.migrator.generateupsql(迁移) 移民) 在Microsoft.entityframeworkcore.migrations.internal.migrator.migrate(字符串) 目标移民) 在Microsoft.entityframeworkcore.design.migrationsoperations.updatedatabase(字符串) 目标移民,字符串上下文类型) 在Microsoft.entityFrameworkcore.tools.cli.databaseupdatecommand。

at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[]

args) 在Microsoft.entityframeworkcore.tools.cli.program.main(string [] args)类型文本的列ID具有valuegener.onadd,但没有默认值 值定义

如何解决此问题?

services.AddIdentity<StoreDbContext, IdentityRole>()
    .AddDefaultTokenProviders();

而不是StordorbContext,您应该提供用户(applicationuser)类。

您正在使用的ASP.NET核心/EF核心的版本是什么?

您可以检查其正确继承应用程序的用户对象实现。似乎您拥有一个没有正确实施的自动基因策略的实体。

您可以在迁移文件中查看其生成用户ID属性的方式,因为它是GUID,因此可能需要处理。您可能有

之类的东西
 modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole", b =>
                {
                    b.Property<string>("Id")
                        .ValueGeneratedOnAdd();

您正在尝试在字符串字段上应用自动化。

,在迁移文件中,您应该具有与字符串值关联的Annotation("Npgsql:ValueGeneratedOnAdd", true);

您可以尝试实现sidentityuser而不是字符串

  public class ApplicationUser : IdentityUser<Guid>
    {
    }

参考以下链接https://github.com/aspnet/docs/tree/master/aspnetcore/security/authentication/Indestity/Sample/sample/sample/src

相关内容

  • 没有找到相关文章

最新更新