Linq 检查是否已使用代码优先方法创建表

Linq 检查是否已使用代码优先方法创建表,linq,entity-framework,ef-code-first,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

我正在使用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
}

如何检查表是否存在,如果不存在,则可能将
present
设置为空集?或者,在我发出LINQ查询之前,可能有一种方法可以强制创建数据库/表?

EF实际上会根据它所连接的数据库检查整个上下文。 数据库可以有多个上下文。但也不少。 那么实际上你检查了吗

 Context.Database.CreateIfNotExists();
如果数据库和上下文不匹配,并且您使用的是自动迁移,则会出现特定的对象错误。但就EF如何处理从上下文到数据库的比较而言,这可能会产生误导

当然,您可以尝试访问上下文中的每个DBSet 但我不确定这有多有用

EF Code first支持自动或按需迁移

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

该链接将提供有关高级数据库处理的手动/受控数据库迁移方法的更多信息。链接中还介绍了更简单的自动方法

 Context.Database.CreateIfNotExists();
Database.SetInitializer