将新SQL表添加到Identity 2.0数据上下文

时间:2015-03-23 17:46:06

标签: c# asp.net sql-server entity-framework azure

我一直在使用Azure托管的Identity 2.0构建一个ASP.NET MVC5 Web应用程序(使用this articlethis article获取有关实现Identity 2.0的指导),并且遇到了一个问题我我希望有人可以提供帮助。

我的问题最终源于需要添加其他SQL表,而不知道从数据上下文角度处理此问题的正确方法。随着Identity 2.0在我的Web应用程序的Azure SQL中完全工作和托管,下一个目标是创建一个新的自定义表来存储一些额外的数据。在我的模型中创建新类,添加脚手架和创建控制器都很简单,但我无法弄清楚的是数据上下文。

我最初做过的事情(在尝试启用代码优先迁移并无意中删除我的Identity 2.0表之前似乎已经工作了一段时间)创建了继承自DbContext的第二个数据上下文(请忽略红色) “WepApp”下的曲线,为了共享的目的将其更改为通用的东西:

Please ignore red squiggles under "WebApp". Changed this to something generic for purpose of sharing.

然后我在Controller中为这个类使用了这个新的数据上下文,如下所示:

enter image description here

虽然这首先完成了工作,但在尝试通过添加其他列来更新此新表时,我无意中删除了我的Identity 2.0表,现在每当我尝试执行任何迁移操作时都会出现“多个数据上下文”错误,阻止我重新创建它们。我怀疑,虽然我很不确定,但是我应该将我的新表集成到与Identity 2.0表相同的数据上下文中,因为它们是同一数据库中的不同表。

任何人都可以提供任何建议,以便在包含Identity 2.0系统的数据库中正确添加其他表吗?特别是,如何从数据上下文角度处理这个问题?我现在有点绝望,因为我完全丢失了我的Identity 2.0后端表,并且正在努力让它们重新创建。感谢。

1 个答案:

答案 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正在正确添加表。