gpt4 book ai didi

c# - 检测 DataContext 表或 View 是否存在的快速方法

转载 作者:太空狗 更新时间:2023-10-29 21:20:46 24 4
gpt4 key购买 nike

目前,我正在开发一个应用程序,它通过 LINQ-to-SQL 依赖(并因此连接到)各种数据库。对于其中一个数据库,连接字符串可能会有所不同,因此是可配置的——但是,该数据库的架构对于所有连接字符串都是相同的。

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

Table<T> DataContext 中的对象对象总是被初始化——即使相应的 SQL 表或 View 没有任何记录。

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

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

虽然这确实有效,但确定 valid 的值需要相当长的时间(每个表的每条记录都被触及),最终导致超时。那么,有没有一种更快、更可靠的方法来确定 Table<T> 是否存在?某个DataContext真的以表的形式存在于相应的数据库中吗?

最佳答案

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

获取您的表的名称。您可以对其进行硬编码,或者您可以通过编程方式获取它

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

MyTableObject是您的 Table 中包含的 LINQ-to-SQL 生成对象,即通用参数 TTable<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);

关于c# - 检测 DataContext 表或 View 是否存在的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1074190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com