EF代码优先:DropCreateDatabaseIfModelChanges除了一个表

时间:2012-05-24 07:38:37

标签: c# entity-framework .net-4.0 entity-framework-4.1 ef-code-first

所以我使用这个角色:

DropCreateDatabaseIfModelChanges

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

2 个答案:

答案 0 :(得分:0)

不是删除整个数据库(这就是那些角色所做的)。我可以想象你可以创建自己的角色,显式执行除你想要保留的表之外的所有表的DROP查询。

答案 1 :(得分:0)

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

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

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();                 
    }
}