我正在使用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查询之前有可能强制创建数据库/表吗?
答案 0 :(得分:0)
EF实际上会根据附加的数据库检查整个上下文。 DB可以具有多个上下文。但不能少。 所以实际上你检查了
Context.Database.CreateIfNotExists();
如果数据库和上下文不匹配且您正在使用自动迁移,则会出现特定的对象错误。但就EF如何处理数据库比较的上下文而言,这可能会产生误导。
您当然可以在上下文中尝试访问每个DBSet 不知道那是多么有用。
EF代码首先支持迁移,自动或按需。
Database.SetInitializer
使用SetInitializer
命令打开自动迁移,例如。
该链接将提供有关用于高级数据库处理的数据库迁移的手动/受控方法的更多信息。更简单的自动方法,也在链接中描述。