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

我想对我的应用程序数据和与身份相关的数据都使用一个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似乎没有创建这2个表,并且没有调用seed方法,这是怎么回事?

编辑:

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

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

最佳答案

在大多数情况下,最好只使用一个Entity Framework上下文,因为这样,您只需要管理单个Entity Framework上下文,这意味着较少的开销。

两者之间的区别在于IdentityDbContext只是从DbContext派生的类(就像创建自己的类一样),但是它包含用于身份验证的其他DbSet,因此您不必自己实现它。从IdentityDbContext派生就可以了。有关更多信息,请查看documentation

关于asp.net - 扩展ASP.NET Identity 2.0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26447631/

10-11 04:13