2014-10-19 59 views
6

我无法理解整个ASP.Net身份框架,我首先尝试将Identity 1.0集成到现有的应用程序中,但是我最终得到了2个DbContext类,我的应用程序数据位于MyDbContext上,和IdentityDbContext上的Identity用户数据。扩展ASP.NET身份2.0

我想为我的应用程序数据和身份相关数据使用单个DbContext,并且在另一个问题上发现我可以像使用DbContext一样使用IdentityDbContext;不过,我想我错过了一些东西。

我使用的是从身份团队

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种方法来填充那些2表,这样的事情:

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

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

编辑:

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

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

回答

4

在大多数情况下,只使用一个实体框架上下文是首选,因为那样你只需要管理那一个,这意味着更少的开销。

两者之间的区别在于IdentityDbContext仅仅是一个从DbContext派生的类(就像您在创建自己的时候一样),但它包含处理身份验证的其他DbSets,因此您不必亲自实现它。从IdentityDbContext派生是好的。欲了解更多信息,你可以看看documentation