【问题标题】:Check the existence of table on Entityframework 6?检查 Entity Framework 6 中的表是否存在?
【发布时间】:2017-10-11 08:58:11
【问题描述】:

我首先使用 Entityframework 6 数据库。正在构建的应用程序将允许用户更改连接字符串。在我测试了新输入的连接字符串的有效性之后,我想检查 edmx 模型上的表是否真的存在于给定的连接字符串上。

所以我尝试了这个:

假设我在 edmx 上有 ExampleEntity.. 来检查它是否存在于我使用的真实数据库表中..

try{
   dbContext.ExampleEntity.ToList();
   return true; // the table exist
}
catch{
   return false;
}

有没有更好的方法来使用 Entityframework 检查数据库表是否存在?

【问题讨论】:

  • 如果表存在,你怎么知道它有预期的列?
  • @Gert 我认为模型属性是表列的反映。实体框架将表列与模型属性映射。我错过了什么吗?
  • 是的,但是如果更改了数据库而不更改表名或添加/删除表怎么办?
  • 可以使用Count()方法判断是否存在,否则返回true。

标签: c# entity-framework


【解决方案1】:

Entity Framework 数据库中没有内置函数首先检查 EDMX 存储模型中的表是否确实存在于数据库中。只有 EF 代码优先,使用迁移,有这样的检查。

我们在数据库优先项目中所做的是向数据库中添加一个包含版本号的小表。此版本号在每次数据库升级时递增。当应用程序启动时,我们检查数据库版本是否与应用程序应该与之通信的版本相匹配。这是一个非常简单但有用的机制。

【讨论】:

    【解决方案2】:

    你可以直接询问数据库是否有一个类似名字的表。

    var tableName = "Tablename";
    tableName = "'" + tableName + "'";
    var count = cxt.Database.SqlQuery(typeof(int), "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME ="+ tableName).ToListAsync().FirstOrDefault();
    var result = Convert.ToInt32(count); //1=true, 0=false;
    

    【讨论】:

    • 参见 cmets:“我特别要求使用 Entityframework 而不是 LINQ 或 SqlQuery 的解决方案”。此外,这与其他 SqlQuery 答案或建议的副本没有本质区别。
    猜你喜欢
    • 2020-11-27
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2012-08-13
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    相关资源
    最近更新 更多