EF CodeFirst:DropCreateDatabaseIfModelChanges 除了一个表

本文关键字:一个 CodeFirst DropCreateDatabaseIfModelChanges EF | 更新日期: 2023-09-27 18:35:06

所以我使用这个角色:

DropCreateDatabaseIfModelChanges

但是有一个表,我要保留它的数据。那么有没有办法排除一个表或保留一个表数据呢?

EF CodeFirst:DropCreateDatabaseIfModelChanges 除了一个表

不,没有办法排除表,因为顾名思义,它将删除整个数据库。

但是,您可以从初始化器继承并重写种子方法以重新插入数据:

public class MyInitializer : DropCreateDatabaseIfModelChanges<MyContext>
{
    protected override void Seed(MyContext context)
    {
        //insert data to tables through context
    }
}

如果你想要更复杂的东西,你需要直接实现IDatabaseInitializer<TContext>,比如:

public class MyComplexInitializer : IDatabaseInitializer<MyContext>
{ 
    public void InitializeDatabase(MyContext context)
    {
        if (context.Database.Exists())
        {
             if (context.Database.CompatibleWithModel(true))
                 return;
             //do something bofore delete
             context.Database.Delete();
        }
        context.Database.Create();
        //add some data to context
        context.SaveChanges();                 
    }
}

不是通过删除整个数据库(这就是这些角色的作用)。我可以想象您可以创建自己的角色,该角色对所有表显式执行 DROP 查询,但要保留的表除外。