private void Init(IRepository repository, string outFile) { _outFile = outFile; _repository = repository; _sbScript = new StringBuilder(10485760); _tableNames = _repository.GetAllTableNames(); _allColumns = _repository.GetAllColumns(); _allForeignKeys = repository.GetAllForeignKeys(); _allPrimaryKeys = repository.GetAllPrimaryKeys(); if (!repository.IsServer()) _allIndexes = repository.GetAllIndexes(); string scriptEngineBuild = AssemblyFileVersion; if (_repository.IsServer()) { // Check if datatypes are supported when exporting from server // Either they can be converted, are supported, or an exception is thrown (if not supported) // Currently only sql_variant is not supported foreach (Column col in _allColumns) { col.CharacterMaxLength = Helper.CheckDateColumnLength(col.DataType, col); col.DateFormat = Helper.CheckDateFormat(col.DataType); // Check if the current column points to a unique identity column, // as the two columns' datatypes must match bool refToIdentity = false; Dictionary<string, Constraint> columnForeignKeys = new Dictionary<string, Constraint>(); // Fix for multiple constraints with same columns var _tableKeys = _allForeignKeys.Where(c => c.ConstraintTableName == col.TableName); foreach (var constraint in _tableKeys) { if (!columnForeignKeys.ContainsKey(constraint.Columns.ToString())) { columnForeignKeys.Add(constraint.Columns.ToString(), constraint); } } if (columnForeignKeys.ContainsKey(string.Format("[{0}]", col.ColumnName))) { var refCol = _allColumns.Where(c => c.TableName == columnForeignKeys[string.Format("[{0}]", col.ColumnName)].UniqueConstraintTableName && string.Format("[{0}]", c.ColumnName) == columnForeignKeys[string.Format("[{0}]", col.ColumnName)].UniqueColumnName).FirstOrDefault(); if (refCol != null && refCol.AutoIncrementBy > 0) { refToIdentity = true; } } col.ServerDataType = col.DataType; // This modifies the datatype to be SQL Compact compatible col.DataType = Helper.CheckDataType(col.DataType, col, refToIdentity, _preserveDateAndDateTime2); } } _sbScript.AppendFormat("-- Script Date: {0} {1} - ErikEJ.SqlCeScripting version {2}", DateTime.Now.ToShortDateString(), DateTime.Now.ToShortTimeString(), scriptEngineBuild); _sbScript.AppendLine(); if (!string.IsNullOrEmpty(_outFile) && !_repository.IsServer()) { GenerateDatabaseInfo(); } //if (!string.IsNullOrEmpty(_outFile) && _sqlite) //{ // _sbScript.AppendLine("SELECT 1;"); // _sbScript.AppendLine("PRAGMA foreign_keys=OFF;"); // _sbScript.AppendLine("BEGIN TRANSACTION;"); //} }