ASP.网络身份不能创建用户

本文关键字:创建 用户 不能 身份 网络 ASP | 更新日期: 2023-09-27 18:12:03

我用过ASP。"网络身份"已经有几次了。在一个新项目中,我似乎在创建用户时遇到了问题。

当调用_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");
            }

Where my LegacyApplicationUser is:

   public class LegacyApplicationUser : IdentityUser
    {
        public virtual ApplicationUserUserInfoMap UserInfoMap { get; set; }
    }
    public class ApplicationUserUserInfoMap
    {
        public int ID { get; set; }
        public string UserGUID { get; set; }
    }

我完全被难住了…无论我是否重建我的数据库,以匹配标准的身份用户或使用我的扩展版本,我一直得到相同的异常显示在顶部。

我可能错过了一些东西,虽然不能确定....

任何想法?

ASP.网络身份不能创建用户

好了,我修好了!

我本来要删除这个问题的,因为事实证明,这是一个非常狭隘的问题。

也就是说,我将把它留在这里,为其他任何人努力让EF玩得很好,而不是所有通过EF的数据库。

在我们的例子中,我们有一个DB不会针对它构建EF(这是一个非常旧的DB) -但是一些新的部分将被EF;ASP。网络身份部分。

事实证明我的问题实际上是与__MigrationHistory表。

一旦我添加了一个DbInterceptor到我的DbContext,我可以看到实际的SQL导致错误。

我删除了_MigrationHistory表中的条目,并且一切正常。

我也遇到过同样的问题

我只是创建没有密码的用户,然后使用密码散列器选择用户退出并再次存储它作为解决方案。只有当我设置用户名和密码时才会失败-我在代码播种数据库时遇到了它。