2014-08-20 3 views
3

Я использую SMO в C# для генерации сценария всей схемы из базы данных.C# SMO не скриптовые ограничения

Вот код, я использую:

// Instanciando 
    Server srv = new Server(con); 

    // Reference the database. 
    Database db = srv.Databases[ConfigurationManager.AppSettings["DB"].ToString()]; 

    // Instanciando el scripteador 
    Scripter scrp = new Scripter(srv); 
    var urns = new List<Urn>(); 

    // Propiedades del script 
    scrp.Options.IncludeHeaders = true; 
    scrp.Options.SchemaQualify = true; 
    scrp.Options.SchemaQualifyForeignKeysReferences = true; 
    scrp.Options.NoCollation = true; 
    scrp.Options.DriAllConstraints = true; 
    scrp.Options.DriAll = true; 
    scrp.Options.DriAllKeys = true; 
    scrp.Options.DriIndexes = true; 
    scrp.Options.ClusteredIndexes = true; 
    scrp.Options.NonClusteredIndexes = true; 
    scrp.Options.ToFileOnly = true; 

    // Obteniendo las tablas de la BD 
    foreach (Table tb in db.Tables) 
    { 
    // check if the table is not a system table 
    if(!tb.IsSystemObject) 
    { 
     urns.Add(tb.Urn); 
    } 
    } 

    // Instanciando un string builder para construir el script 
    StringBuilder builder = new StringBuilder(); 
    System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray()); 
    foreach (string st in sc) 
    { 
    // Agregando los comandos al string builder 
    builder.AppendLine(st); 
    builder.AppendLine("GO"); // Se coloca GO al final de cada statement 
    } 

    // Escribiendo el archivo 
    File.WriteAllText(path, builder.ToString()); 

Проблема заключается в том, что скрипт генерируется без каких-либо ограничений. (FK, PK, UQ, CK).

Что я делаю неправильно?

ответ

1

Попробуйте использовать:

scrp.Options.EnforceScriptingOptions = true; 
0

С этой скриптером варианты у меня есть свои ограничения:

 Scripter CreateScrp = new Scripter(srv); 
     CreateScrp.Options.ScriptDrops = false; // Script drop statements 
     CreateScrp.Options.WithDependencies = true; // Walk dependencies 
     CreateScrp.Options.DriAllConstraints = true; // to include referential constraints in the script 
     CreateScrp.Options.Triggers = true; // Script triggers 
     CreateScrp.Options.NoCollation = false; // Use default collation  
     CreateScrp.Options.ExtendedProperties = true; // Script Extended Properties 
     CreateScrp.Options.SchemaQualify = true; // Qualify objects with schema names 
     CreateScrp.Options.ScriptSchema = true; // Script schema 
     CreateScrp.Options.IncludeDatabaseContext = true; 
     CreateScrp.Options.EnforceScriptingOptions = true; 
     CreateScrp.ScriptingProgress += CreateScrp_ScriptingProgress; 

Не уверен, какой из них вы пропали без вести, хотя ^^

Смежные вопросы