加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 检测DataContext表或视图是否存在的快速方法

发布时间:2020-12-15 08:21:38 所属栏目:百科 来源:网络整理
导读:目前,我正在开发一个依赖于(并因此连接到)各种数据库的应用程序,通过LINQ-to-SQL.对于其中一个数据库,连接字符串可能会有所不同,因此可配置 – 但是,此数据库的模式对于所有连接字符串都是相同的. 由于可配置的连接字符串,我想在启动应用程序期间验证DataCon
目前,我正在开发一个依赖于(并因此连接到)各种数据库的应用程序,通过LINQ-to-SQL.对于其中一个数据库,连接字符串可能会有所不同,因此可配置 – 但是,此数据库的模式对于所有连接字符串都是相同的.

由于可配置的连接字符串,我想在启动应用程序期间验证DataContext,以确保我的应用程序使用的所有表和视图都可用.

表< T> DataContext对象中的对象始终初始化 – 即使相应的SQL表或视图没有任何记录.

那么.目前,验证检查执行如下:

bool valid = _dataContext.Articles.Count() > 0
            && _dataContext.Customers.Count() > 0
            && _dataContext.Orders.Count() > 0;

虽然这确实有效,但确定有效值需要相当长的时间(触摸每个表的每个记录),这最终会导致超时.那么,是否存在更快,更可靠的方式来确定表< T>.某个DataContext确实作为相应数据库中的表存在?

解决方法

这是一个(未经测试的)想法:

抓住你的桌子的名字.您可以对其进行硬编码,也可以通过编程方式获取

TableAttribute attribute = (TableAttribute)typeof(MyTableObject)
                           .GetCustomAttributes(typeof(TableAttribute),true)
                           .Single();
string name = attribute.Name;

MyTableObject是表中包含的LINQ-to-SQL生成对象,即表< T>中的通用参数T.

(TableAttribute是在System.Data.Linq.Mapping.)

使用DataContext.ExecuteQuery方法,如

var db = new MyDataContext();
var results = db.ExecuteQuery<string>("SELECT name FROM dbo.sysobjects WHERE xtype = 'U'");
bool hasTable = results.Any(s => "dbo." + s == name);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读