我试图在本地项目中实现web api的身份验证,并学习这个过程,我使用asp.net的教程在这里我用这个镜子得到的错误是我自己遇到的问题,所以感觉这是一个很好的解决问题的起点。我所做的唯一更改是将其指向我的本地SQL数据库。
我不喜欢它创建的表的命名约定,所以我添加了一个覆盖来指定从在线资源获得的表名。当我添加这个覆盖时,它抛出一个状态码500内部服务器错误:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("User").Property(p => p.Id).HasColumnName("UserID");
modelBuilder.Entity<IdentityRole>().ToTable("Roles").Property(p => p.Id).HasColumnName("RoleID");
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin");
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim").Property(p => p.Id).HasColumnName("UserClaimID");
}
}
如何在保留功能的同时更改表名?
代码看起来很好,一个500的错误是不够的信息,你或我们继续。在Web API中,几乎任何异常都会返回500。
遵循以下指南是值得的:https://www.asp.net/web-api/overview/error-handling/exception-handling以帮助确定此问题的根本原因以及您的Web API中的未来问题。
所以问题是我运行了一次,它创建了默认的表模式,然后我再次运行它,它期待代码迁移来更新表。我希望它生成新的表,所以这就是困惑所在。我删除了整个数据库,并保留了相同的覆盖方法,它工作了。