我现在已经使用过ASP.Net Identity几次了。在一个新项目中,我似乎遇到了创建用户的问题。
调用_userManager.Create()
时出现以下错误。
The string '{ Name: IX_UserId, Order: 0 }' was not
in the expected format to be deserialized by the
IndexAnnotationSerializer. Serialized values are expected to have
the format '{ Name: 'MyIndex', Order: 7, IsClustered: True,
sUnique: False } { } { Name: 'MyOtherIndex' }'.
我尝试使用以下DbContext,除了类名之外,它与我在另一个项目中使用的DbContext相同,可以使用
public partial class ISIdentityDbContext : IdentityDbContext<IdentityUser>
{
public ISIdentityDbContext()
: base("ISIdentityDbContext")
{ }
public DbSet<ApplicationUserUserInfoMap> ApplicationUserUserInfoMap { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// asp.net identity - call the tables something else..
modelBuilder.Entity<IdentityRole>().ToTable("ApplicationRoles");
modelBuilder.Entity<IdentityUserClaim>().ToTable("ApplicationUserClaims");
modelBuilder.Entity<IdentityUserLogin>().ToTable("ApplicationUserLogins");
modelBuilder.Entity<IdentityUserRole>().ToTable("ApplicationUserRoles");
modelBuilder.Entity<IdentityUser>().ToTable("ApplicationUser");
}
}
我尝试了以下内容:
using (ISIdentityDbContext context = new ISIdentityDbContext())
{
_userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(context));
IdentityUser user = new IdentityUser();
user.UserName = "darren";
_userManager.Create(user, "password");
}
而且,我真的需要工作,因为它扩展了ApplicationUser(IdentityUser)
using (ISIdentityDbContext context = new ISIdentityDbContext())
{
_userManager = new UserManager<LegacyApplicationUser>(new UserStore<LegacyApplicationUser>(context));
ApplicationUserUserInfoMap map = new ApplicationUserUserInfoMap();
map.UserGUID = "anIdFromAnotherTable";
LegacyApplicationUser user = new LegacyApplicationUser();
user.UserInfoMap = map;
user.UserName = "darren";
_userManager.Create(user, "password");
}
我的LegacyApplicationUser在哪里:
public class LegacyApplicationUser : IdentityUser
{
public virtual ApplicationUserUserInfoMap UserInfoMap { get; set; }
}
public class ApplicationUserUserInfoMap
{
public int ID { get; set; }
public string UserGUID { get; set; }
}
我完全难过......无论我是重建我的数据库以匹配标准身份用户还是使用我的扩展版本,我都会在顶部显示相同的异常。
我可能错过了一些东西,但无法想象......
有什么想法吗?
答案 0 :(得分:3)
好的 - 我修好了!
我打算删除这个问题,因为事实证明,这是一个非常狭隘的问题。
说,我会留在这里为其他人努力让EF与一个不通过EF的数据库玩得很好。
在我们的案例中,我们有一个不会对其构建EF的数据库(它是一个非常古老的数据库) - 但是一些新的部分将是EF&#39; ed; ASP.Net Identity部分。
事实证明我的问题实际上是__MigrationHistory表。
我向DbInterceptor
添加DbContext
后,我可以看到导致错误的实际SQL。
我删除了_MigrationHistory表中的条目,一切正常。
答案 1 :(得分:0)
我遇到了同样的问题
我只是在没有密码的情况下创建用户,然后使用密码hasher选择用户退出并再次存储它作为解决方法。它只在我设置用户名和密码时失败 - 我在代码播种数据库时遇到了它。