如何在PostgreSQL中使用Identity?

时间:2017-09-12 16:57:56

标签: c# postgresql asp.net-core asp.net-identity entity-framework-core

我已经通过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>();
}

在StartUp'配置中我添加了以下内容:

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:text类型的列ID   ValueGenerated.OnAdd但未定义默认值   Microsoft.EntityFrameworkCore.Migrations.NpgsqlMigrationsSqlGenerator.ColumnDefinition(字符串   schema,String表,String name,Type clrType,String type,   Nullable 1 unicode, Nullable 1 maxLength,Boolean rowVersion,Boolean   nullable,Object default Value,String defaultValueSql,String   computedColumnSql,IAnnotatable annotatable,IModel model,   MigrationCommandListBuilder构建器)       在Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.ColumnDefinition(AddColumnOperation)   操作,IModel模型,MigrationCommandListBuilder构建器)       在Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(CreateTableOperation)   operation,IModel model,MigrationCommandListBuilder builder,Boolean   终止)       在Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(CreateTableOperation)   操作,IModel模型,MigrationCommandListBuilder构建器)       在Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(MigrationOperation)   操作,IModel模型,MigrationCommandListBuilder构建器)       在Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(IReadOnlyList`1   操作,IModel模型)       在Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.GenerateUpSql(迁移   移民)       在Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String   targetMigration)       在Microsoft.EntityFrameworkCore.Design.MigrationsOperations.UpdateDatabase(String   targetMigration,String contextType)       在Microsoft.EntityFrameworkCore.Tools.Cli.DatabaseUpdateCommand。&lt;&gt; c__DisplayClass0_0.b__0()

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

参数)       在Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String [] args)文本类型的列ID具有ValueGenerated.OnAdd但没有默认值   值已定义

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

您应该提供User(ApplicationUser)类,而不是StoreDbContext。

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

答案 1 :(得分:0)

您是否可以检查它正确继承ApplicationUser的User对象实现。 您似乎有一个实体没有正确实施自动生成​​策略。

您可以在迁移文件中检查applicationUser类,了解它生成用户标识属性的方式,因为它是一个GUID,因此可能需要处理它。 你可能有像

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

您尝试在字符串字段上应用自动生成。

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

您可以尝试使用IdentityUser而不是字符串

  public class ApplicationUser : IdentityUser<Guid>
    {
    }

请参阅以下链接 https://github.com/aspnet/Docs/tree/master/aspnetcore/security/authentication/identity/sample/src