我通过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