将 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服务
LinqPad + EF 4.1 + SQL Server CE
使用脚本将 LinqPad 结果控制台导出为 Html 文件