0

I am using Entity Framework's code-first approach to create tables, and I need to check if there are any entities in the database that I need to delete:

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
}

on first run, when there is no table yet, the LINQ expression above throws an exception:

Invalid object name 'dbo.Documents'

How do I check if the table is there and if it is not, then set present to the empty set, perhaps? Or maybe there is a way to force database/table creation before I issue the LINQ query?

4

1 回答 1

0

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

 Context.Database.CreateIfNotExists();

如果数据库和上下文不匹配并且您正在使用自动迁移,那么您会收到特定的对象错误。但这在 EF 如何处理上下文与数据库比较方面可能会产生误导。

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

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

请参阅EF 代码首次迁移

Database.SetInitializer

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

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

于 2013-09-24T07:47:12.950 回答