IdentityDbContext不使用DropCreateDatabaseAlways创建表

时间:2014-10-12 14:15:50

标签: c# entity-framework asp.net-web-api2

我正在使用这个WebApi项目,我正在使用最新版本的身份验证。 我的两个Context设置看起来像这样,一个是自动生成用于身份验证,一个是我自己的dbcontext用于其他表:

认证表的ApplicationDbContext

public class IdentityContext : IdentityDbContext<ApplicationUser>
{
    public IdentityContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {

    }

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

MyDbContext

public class Context : DbContext
{
    public Context()
        : base("name=DefaultConnection")
    {
        this.Configuration.LazyLoadingEnabled = true;
        this.Configuration.ProxyCreationEnabled = true;
        Database.SetInitializer(new DropCreateInitializer());
        this.Database.CreateIfNotExists();
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
       //FluentApi
    }
}

DropCreateInitializer

public class DropCreateInitializer : DropCreateDatabaseAlways<Context>
{
    protected override void Seed(Context context)
    {
        // Seeding works nice here
    }
}

我的问题是,只要我使用DropCreateDatabaseAlways和seed,它就不会重新创建我的表进行身份验证。我只是想不通为什么?

请帮忙!

亲切的问候,哈里斯

1 个答案:

答案 0 :(得分:1)

您只需为Context课程创建和设置初始值设定项。

如果您希望IdentityContext类也始终删除并重新创建,则需要为该类实现一个额外的初始值设定项:

public class IdentityDropCreateInitializer : 
    DropCreateDatabaseAlways<IdentityContext>
{
    protected override void Seed(Context context)
    {
        //Seed identity tables here
    }
}

然后将其分配给IdentityContext,如此:

public IdentityContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
        Database.SetInitializer(new IdentityDropCreateInitializer());
    }