扩展ASP.NET Identity 2.0

时间:2014-10-19 05:24:54

标签: asp.net asp.net-mvc entity-framework asp.net-identity

我无法理解整个ASP.Net Identity框架,我首先尝试将Identity 1.0集成到现有应用程序中,但我最终得到了2个DbContext类,我的应用程序数据在MyDbContext上,而IdentityDbContext上的Identity用户数据

我想对我的应用程序数据和身份相关数据使用单个DbContext,我在一个不同的问题上发现我可以像使用DbContext一样使用IdentityDbContext;但是,我想我错过了什么。

我正在使用Identity团队的示例项目

PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre

并尝试将DbSet属性插入ApplicationDbContext

 public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

    static ApplicationDbContext()
    {
        // Set the database intializer which is run once during application start
        // This seeds the database with admin user credentials and admin role
        Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
    }

    public virtual DbSet<Student> students { get; set; }
    public virtual DbSet<Teachers> teachers { get; set; }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

我正在使用ApplicationDbInitializer种子方法来填充这两个表,如下所示:

Student s = new Student { Name = "John" ... };
db.students.Add(s);
db.SaveChanges();

但EF似乎没有创建那两个表,并且种子方法没有被调用,发生了什么?

修改

好吧,我需要运行使用EF数据库的代码来删除并重新创建数据库。

使用IdentityDbContext管理我的所有应用程序数据是否有任何开销? 使用IdentityDbContext和使用通用版本IdentityDbContext&lt; IdentityUser&gt;有什么区别?

1 个答案:

答案 0 :(得分:5)

在大多数情况下,首选只使用一个Entity Framework上下文,从那时起,您只需要管理那个单独的上下文,这意味着开销更少。

两者之间的区别在于IdentityDbContext只是一个派生自DbContext的类(就像你自己创建的那样),但是它包含了处理身份验证的其他DbSets,所以你不要这样做必须自己实施。从IdentityDbContext派生是好的。有关详细信息,请查看documentation