我已经通过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但没有默认值 值已定义
我该如何解决这个问题?
答案 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