2013-03-12 15 views
8

Próbuję użyć SMO dla Sql Server 2008 R2 Standard, ale pojawia się problem, gdy próbuję Dump obiektu.Używanie LinqPad z SMO

Error

Odpowiedni kod:

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 
} 

Assemblies Includes

Edit:

Dzieło wokół, że znalazłem jest użycie metody Dump o stałej głębokości rekurencji na przykład Dump(1), ale wyjątek dotyczy innego poziomu dla każdego obiektu.

Odpowiedz

4

Co się dzieje, że akt wywoływania GetEnumerator na jednej z właściwości obiektu SMO rzuca wyjątek, a LINQPad odpowiada, przesyłając tylko ten wyjątek, a nie resztę wykresu obiektu.

Uważam, że jest to błąd w LINQPadzie, więc naprawiłem go dla następnej wersji beta.

Jednakże, nawet przy tym rozwiązaniu, przekonasz się, że wywołanie Dump() na obiektach SMO będzie trwało wiecznie, ponieważ ma tak wiele właściwości, których wyliczenie zajmuje wiele wieków. Musisz więc albo ograniczyć głębokość rekursji, albo wywołać Dump (true), co jest równoważne kliknięciu przycisku "Results to DataGrids". Przesyłanie wyników do sieci danych pozwala uniknąć problemu, ponieważ sieci renderują dane leniwie.