Linq 检查是否已使用代码优先方法创建表
我正在使用Entity Framework的代码优先方法创建表,我需要检查数据库中是否有需要删除的实体: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
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