我一直在使用Azure托管的Identity 2.0构建一个ASP.NET MVC5 Web应用程序(使用this article和this article获取有关实现Identity 2.0的指导),并且遇到了一个问题我我希望有人可以提供帮助。
我的问题最终源于需要添加其他SQL表,而不知道从数据上下文角度处理此问题的正确方法。随着Identity 2.0在我的Web应用程序的Azure SQL中完全工作和托管,下一个目标是创建一个新的自定义表来存储一些额外的数据。在我的模型中创建新类,添加脚手架和创建控制器都很简单,但我无法弄清楚的是数据上下文。
我最初做过的事情(在尝试启用代码优先迁移并无意中删除我的Identity 2.0表之前似乎已经工作了一段时间)创建了继承自DbContext的第二个数据上下文(请忽略红色) “WepApp”下的曲线,为了共享的目的将其更改为通用的东西:
然后我在Controller中为这个类使用了这个新的数据上下文,如下所示:
虽然这首先完成了工作,但在尝试通过添加其他列来更新此新表时,我无意中删除了我的Identity 2.0表,现在每当我尝试执行任何迁移操作时都会出现“多个数据上下文”错误,阻止我重新创建它们。我怀疑,虽然我很不确定,但是我应该将我的新表集成到与Identity 2.0表相同的数据上下文中,因为它们是同一数据库中的不同表。
任何人都可以提供任何建议,以便在包含Identity 2.0系统的数据库中正确添加其他表吗?特别是,如何从数据上下文角度处理这个问题?我现在有点绝望,因为我完全丢失了我的Identity 2.0后端表,并且正在努力让它们重新创建。感谢。
答案 0 :(得分:2)
我认为你需要在“DefaultConnection”之外添加DbContext(请注意,你需要在webconfig文件中添加另一个connectionString):
public class CustProfileContext : DbContext
{
public DbSet<CustProfile> CustProfiles { get; set; }
}
或者,将DbSet语句移动到ApplicationDbContext,如:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public System.Data.Entity.DbSet<WebApp.Models.CustProfile> CustProfiles { get; set; }
}
执行其中一个操作后,添加新的迁移并查看configuration.cs文件,以确保Entity Framework正在正确添加表。