检查是否已在代码第一种方法中创建表

时间:2013-09-24 04:33:25

标签: linq entity-framework ef-code-first

我正在使用Entity Framework的代码优先方法来创建表,我需要检查数据库中是否有任何需要删除的实体:

class MyDocument
{
    public string Id { get; set; }
    public string Text { get; set; }
}

class MyContext : DbContext
{
    public DbSet<MyDocument> Documents { get; set; }
}


using (var data = new MyContext())
{
    var present = from d in data.Documents
                  where d.Id == "some id" || d.Id == "other id"
                  select d;
    // delete above documents
}

在第一次运行时,当还没有表时,上面的LINQ表达式抛出异常:

Invalid object name 'dbo.Documents'

如何查看表格是否存在,如果不存在,那么可能将present设置为空集?或者在发出LINQ查询之前有可能强制创建数据库/表吗?

1 个答案:

答案 0 :(得分:0)

EF实际上会根据附加的数据库检查整个上下文。 DB可以具有多个上下文。但不能少。 所以实际上你检查了

 Context.Database.CreateIfNotExists();

如果数据库和上下文不匹配且您正在使用自动迁移,则会出现特定的对象错误。但就EF如何处理数据库比较的上下文而言,这可能会产生误导。

您当然可以在上下文中尝试访问每个DBSet 不知道那是多么有用。

EF代码首先支持迁移,自动或按需。

请参阅EF Code first migrations

Database.SetInitializer

使用SetInitializer命令打开自动迁移,例如。

该链接将提供有关用于高级数据库处理的数据库迁移的手动/受控方法的更多信息。更简单的自动方法,也在链接中描述。