将 LinqPad 与 SMO 一起使用

Posted

技术标签:

【中文标题】将 LinqPad 与 SMO 一起使用【英文标题】:Using LinqPad with SMO 【发布时间】:2013-02-28 00:14:15 【问题描述】:

我正在尝试将 SMO 用于 Sql Server 2008 R2 Standard,但每当我尝试 Dump 一个对象时都会遇到问题。

相关代码:

void Main()

    var connectionString = @"Server=(local);Trusted_Connection=True;";
    Server server = new Server(new ServerConnection(new SqlConnection(connectionString)));
    server.ConnectionContext.Connect();     

    server.Dump(); //Error      

    Database database = new Database(server, "master");
    database.Refresh();

    database.Dump(); // Error

    IEnumerable<Table> tables = database.Tables.Cast<Table>();

    tables.Dump(); //Error

编辑:

我发现的一种解决方法是使用具有固定递归深度的 Dump 方法,例如Dump(1),但每个对象的异常级别不同。

【问题讨论】:

【参考方案1】:

发生的情况是,在 SMO 对象属性之一上调用 GetEnumerator 的行为会引发异常,LINQPad 会通过仅转储该异常而不是对象图的其余部分来响应。

我认为这是 LINQPad 中的一个错误,因此已在下一个 beta 版本中修复它。

但是,即使修复了这个问题,您也会发现在 SMO 对象上调用 Dump() 将需要很长时间,因为它有很多属性需要很长时间才能枚举。因此,您必须限制递归深度,或者调用 Dump(true),这相当于单击“Results to DataGrids”按钮。将结果转储到数据网格可以避免这个问题,因为网格会延迟渲染数据。

【讨论】:

以上是关于将 LinqPad 与 SMO 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

使用?wsdl URI查询将LinqPad连接到WCF Web服务

将 SMO 数据类型转换为 SqlDataTypes

LinqPad + EF 4.1 + SQL Server CE

使用脚本将 LinqPad 结果控制台导出为 Html 文件

Linqpad - Linq to Sql Ambiguous表和链接服务器名称

如何在 LinqPad 中提交更改