我正在使用Entity Framework 6访问数据库。随着时间推移,该数据库的模式存在几个略有不同的版本。当模式的某些部分可能“丢失”时,我如何使用EF访问数据库?
例如,某个时候向数据库添加了一个“Tank”表,因此我希望能够将其添加到我的上下文中。
然后可以对其执行查询,如下所示:
但是很明显,当运行在没有这个表的版本的模式下时,这会引发异常。
除了捕获异常并检查适当的SQL错误代码之外,还有没有其他清晰处理此问题的方法?最好是让EF在运行查询之前检查表是否存在的某种方式?我在
我应该指出的是,没有任何一个表上有“模式版本号”或类似的列,可以帮助确定正在访问哪个版本的数据库。也许这是个好主意(后见之明),但从未发生过,并且将这样的东西改装到现有安装中将是困难的。
此外,在我的特定场景中,我只是从现有数据库中读取数据:我不需要使用EF写入数据库,也不需要让EF为我构建模式。
编辑:我刚刚发现了这个SO问题:Entity Framework-如何检查表是否存在?,但答案基本上推荐执行SQL查询。虽然那是2011年的事情,但我想知道EF是否在以后的版本中引入了更清晰的内容。
例如,某个时候向数据库添加了一个“Tank”表,因此我希望能够将其添加到我的上下文中。
public DbSet<Tank> Tanks { get; set; }
然后可以对其执行查询,如下所示:
var tanks = context.Tanks.Where( ... ).ToList()
但是很明显,当运行在没有这个表的版本的模式下时,这会引发异常。
除了捕获异常并检查适当的SQL错误代码之外,还有没有其他清晰处理此问题的方法?最好是让EF在运行查询之前检查表是否存在的某种方式?我在
DbContext
类上找不到任何有用的信息,在互联网搜索中也没有真正找到任何有用的东西。我想我可以降低原始SQL来完成它。
我应该指出的是,没有任何一个表上有“模式版本号”或类似的列,可以帮助确定正在访问哪个版本的数据库。也许这是个好主意(后见之明),但从未发生过,并且将这样的东西改装到现有安装中将是困难的。
此外,在我的特定场景中,我只是从现有数据库中读取数据:我不需要使用EF写入数据库,也不需要让EF为我构建模式。
编辑:我刚刚发现了这个SO问题:Entity Framework-如何检查表是否存在?,但答案基本上推荐执行SQL查询。虽然那是2011年的事情,但我想知道EF是否在以后的版本中引入了更清晰的内容。