Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET标识从AspNetUsers表中删除列_C#_Asp.net_Entity Framework_Asp.net Identity - Fatal编程技术网

C# ASP.NET标识从AspNetUsers表中删除列

C# ASP.NET标识从AspNetUsers表中删除列,c#,asp.net,entity-framework,asp.net-identity,C#,Asp.net,Entity Framework,Asp.net Identity,当我使用ASP.NET标识优先代码方法时,我希望以自己的方式在AspNetUsers表中生成列。我不需要用空值存储多个列。我只需要列Id、SecurityStamp和用户名。 我发现的唯一一个帖子是:,但它仍然没有被喜欢(由于Santosh评论中的错误) 有人能告诉我怎么解决这个问题吗 编辑:甚至可以删除其中一些列/属性吗 谢谢简短的回答是否定的,除非您自己滚动实现。或者,您可以等待他们在上打开源代码asp.net标识。谁知道要花多长时间 默认实现包括所有未使用的列(见下文) //摘要: //默

当我使用ASP.NET标识优先代码方法时,我希望以自己的方式在AspNetUsers表中生成列。我不需要用空值存储多个列。我只需要列Id、SecurityStamp和用户名。 我发现的唯一一个帖子是:,但它仍然没有被喜欢(由于Santosh评论中的错误)

有人能告诉我怎么解决这个问题吗

编辑:甚至可以删除其中一些列/属性吗


谢谢

简短的回答是否定的,除非您自己滚动实现。或者,您可以等待他们在上打开源代码asp.net标识。谁知道要花多长时间

默认实现包括所有未使用的列(见下文)

//摘要:
//默认EntityFramework IUser实现
//
//类型参数:
//TKey:
//
//特洛金:
//
//特罗尔:
//
//目标:
公共类标识用户:IUser
其中TLogin:Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin
where-TRole:Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole
其中TClaim:Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim
{
//总结:
//建造师
公共身份识别器();
//总结:
//用于记录故障,以便锁定
公共虚拟int AccessFailedCount{get;set;}
//
//总结:
//用户声明的导航属性
公共虚拟ICollection声明{get;}
//
//总结:
//电子邮件
公共虚拟字符串电子邮件{get;set;}
//
//总结:
//如果电子邮件已确认,则默认为false
公共虚拟布尔值{get;set;}
//
//总结:
//用户ID(主键)
公共虚拟密钥Id{get;set;}
//
//总结:
//是否为此用户启用了锁定
公共虚拟bool LockoutEnabled{get;set;}
//
//总结:
//锁定结束时,不考虑过去的任何时间
//锁在外面。
公共虚拟日期时间?LockoutEndDateUtc{get;set;}
//
//总结:
//用户登录的导航属性
公共虚拟ICollection登录名{get;}
//
//总结:
//用户密码的加盐/哈希形式
公共虚拟字符串密码哈希{get;set;}
//
//总结:
//用户的电话号码
公共虚拟字符串PhoneNumber{get;set;}
//
//总结:
//如果确认了电话号码,则默认为false
公共虚拟bool phonenumberconfirm{get;set;}
//
//总结:
//用户角色的导航属性
公共虚拟ICollection角色{get;}
//
//总结:
//当用户凭据发生更改时,应更改的随机值
//(密码已更改,登录名已删除)
公共虚拟字符串SecurityStamp{get;set;}
//
//总结:
//是否为用户启用了双因素
公共虚拟布尔TwoFactorEnabled{get;set;}
//
//总结:
//用户名
公共虚拟字符串用户名{get;set;}
}

实际上,您可以在上下文类的
OnModelCreating
上配置实体

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<IdentityUser>().Ignore(u => u.AccessFailedCount);
    //and so on...
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().Ignore(u=>u.AccessFailedCount);
//等等。。。
}
或者,如果您的应用程序对每个配置都有单独的文件(我建议使用该文件),您可以这样做:

public class ApplicationUserEntityTypeConfiguration : EntityTypeConfiguration<ApplicationUser>
{
    public ApplicationUserEntityTypeConfiguration()
    {
        Ignore(p => p.AccessFailedCount);
        //And so on..
    }
}
公共类应用程序SerentityTypeConfiguration:EntityTypeConfiguration
{
公共应用程序SerentityTypeConfiguration()
{
忽略(p=>p.AccessFailedCount);
//等等。。
}
}

实际上,您可以忽略这些字段,只需在上下文类中将实体配置为OnModelCreating

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<IdentityUser>().Ignore(c => c.AccessFailedCount)
                                           .Ignore(c=> c.LockoutEnabled)
                                           .Ignore(c=>c.LockoutEndDateUtc)
                                           .Ignore(c=>c.Roles)
                                           .Ignore(c=>c.TwoFactorEnabled);//and so on...

        modelBuilder.Entity<IdentityUser>().ToTable("Users");//to change the name of table.

}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity().Ignore(c=>c.AccessFailedCount)
.Ignore(c=>c.LockoutEnabled)
.Ignore(c=>c.LockoutEndDateUtc)
.Ignore(c=>c.Roles)
.Ignore(c=>c.twofacturenabled);//依此类推。。。
modelBuilder.Entity().ToTable(“用户”);//更改表的名称。
}

我知道这可能并不完全相关,但如果您只是想在JSON响应中排除列,那么您所要做的就是将[JsonIgnore]放在属性上方。我使用实体,因此默认情况下(加密的)密码包含在模型中。即使密码已加密,您仍然不希望最终用户获得它。下面显示了一种在不将其包含在响应中的情况下保持对该属性的访问的方法

在下面的示例中,密码字段将从Json响应中删除,因为我们在模型中添加了[JsonIgnore]

public int Id { get; set; }
public string Email { get; set; }

[JsonIgnore]
public string Password { get; set; } // <--- Removed from JSON response

public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string PhoneNumber { get; set; }
public bool Active { get; set; }

您可以根据需要创建IdentityUser覆盖属性的后代,并修饰它们的[NotMapped]属性。然后创建(重新创建)标识表

[未映射]
公共覆盖bool{get;set;}

您可能不需要这些值,但您确定asp.net不需要它们才能正常运行吗?我意识到可能存在某种关系,我已编辑了我的问题如果您想要自己的自定义表,则不要使用
标识。Entityframework
您没有用户电子邮件吗?密码散列呢?为什么空列会困扰你?它们不占用太多空间,对数据库性能没有影响。你只是在为自己创造额外的工作。谢谢你,这就是我想要感谢的。您认为,在这个表中有100000条记录,甚至更多,并且所有这些字段都为空,这是一个问题吗?我认为
public int Id { get; set; }
public string Email { get; set; }

[JsonIgnore]
public string Password { get; set; } // <--- Removed from JSON response

public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string PhoneNumber { get; set; }
public bool Active { get; set; }
{
  "id": 1,
  "email": "ddavis@example.com",
  "firstName": "Daniel",
  "middleName": "Cool-Guy",
  "lastName": "Davis",
  "phoneNumber": "12055550000",
  "active": true
}