【问题标题】:How to check if table exists in model but not in Database如何检查表是否存在于模型中但不存在于数据库中
【发布时间】:2011-05-30 01:04:34
【问题描述】:

我有一个从数据库中提取的模型。后来,我从数据库中删除了表,但没有更新模型。现在,我应该执行一个测试来测试该表是否存在于模型中但不存在于数据库中。谁能告诉我如何使用代码检查这个?

【问题讨论】:

  • 你想达到什么目的??

标签: sql-server asp.net-mvc linq-to-sql asp.net-mvc-2


【解决方案1】:

您可以连接到数据库并获取 information_schema.Tables 表,然后检查您希望拥有的所有表是否都在其中。

获取 Linq-to-Sql DataContext 使用的所有表:

var dataContext = new DataContext();
var dataContextTableNames = (from tables in dataContext.Mapping.GetTables()
                             select tables.TableName).ToList();

然后使用您选择的 sql 方法,您将在数据库上运行“SELECT [TABLE_NAME] FROM [Information_Schema].[Tables]”,并将其与 DataContext 中的数据进行比较。

【讨论】:

  • 这就是我要找的。谢谢
  • 它在 Linq2SQL 中运行良好,但是我们无法在实体框架中获取 .mapping.gettables()。你能告诉我EF中对应的方法是什么吗?
  • 对不起 Kumar,我真的没有实体框架的经验。您必须了解如何从其他地方获取实体表。
【解决方案2】:

好吧,一种快速简单的方法可能是尝试使用 Model 和 Linq-to-Sql 在表中插入或选择某些内容,并检查是否抛出了 SQLException。我不确定您是否可以捕获异常中的任何特定内容,例如 SQLTableDoesNotExistException,但是如果抛出的异常有任何特定属性可以区分其他 SQLException,那么在调试器中应该很容易看到。

【讨论】:

    【解决方案3】:

    嗯.. 看起来您正在尝试编写新测试。在删除这些表之前,您是否没有首先验证表和实体交互的集成测试?

    一旦从数据库中删除表,这些集成测试就会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      相关资源
      最近更新 更多