下面经过此文章为“更改主键为用户在ASP.NET身份”加入种子法新角色时,我有一个问题。
无法将NULL值插入列
'Id'
,表'X.dbo.AspNetRoles'
; 列不允许为空。INSERT失败。
该语句已终止。
我的代码是:
protected override void Seed(ApplicationDbContext context)
{
var roleStore = new CustomRoleStore(context);
var roleManager = new ApplicationRoleManager(roleStore);
if (!roleManager.RoleExists("Administrador"))
roleManager.Create(new CustomRole("Administrador"));
}
错误发生在最后一行:roleManager.Create ...
加上本教程,我在IdentityConfig.cs中具有此实现:
public class ApplicationRoleManager : RoleManager<CustomRole, int>
{
public ApplicationRoleManager(IRoleStore<CustomRole, int> roleStore)
: base(roleStore) { }
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
return new ApplicationRoleManager(new RoleStore<CustomRole, int, CustomUserRole>(context.Get<ApplicationDbContext>()));
}
}
编辑1
public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser, CustomRole, int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
我可以为此做一些工作。您可以手动更新数据库上的CustomRole表以具有自动增量值。然后按照以下说明覆盖EF OnModelCreating。
public partial class ApplicationDbContext : IdentityDbContext<ApplicationUser, CustomRole, int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
protected override void OnModelCreating(DbModelBinder modelBinder)
{
modelBinder.Entity<CustomRole>().ToTable("CustomRole"); // This may be not needed, check it.
modelBinder.Entity<CustomRole>().Property(r => r.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句