2016-04-01 1 views
0

Облицовочной же вопрос, есть ли прогресс на этом: http://www.softfluent.com/product/codefluent-entities/knowledge-center/point-sql-server-producer-to-production-db-instead-of-using-pivot-producerPivot Runner: сила удаления существующих ограничений, которые соответствуют ограничению, необходимое для новой модели

Спасибо за ваш ответ,

EDIT: это код, который используется для удаления всех ограничений

private static void RemoveCodeFluentConstraintsTable(IList<PivotRunnerConstraint> constraints, String connectionString) 
    { 

     using (SqlConnection con = new SqlConnection(connectionString)) 
     { 
      con.Open(); 

      // Set up a command with the given query and associate 
      // this with the current connection. 
      using (SqlCommand cmd = new SqlCommand("SELECT tables.name as tableName, default_constraints.name as constraintName FROM sys.all_columns INNER JOIN sys.tables ON all_columns.object_id = tables.object_id INNER JOIN sys.schemas ON tables.schema_id = schemas.schema_id INNER JOIN sys.default_constraints ON all_columns.default_object_id = default_constraints.object_id", con)) 
      { 

       foreach (PivotRunnerConstraint constraint in constraints) 
       { 
        String tableName = constraint.ParentName; 
        String constraintName = constraint.Name; 
        if (tableName != null && constraintName != null) 
        { 
         SqlCommand cmdConstraint = new SqlCommand("ALTER TABLE [MySchema].[" + tableName + "] DROP CONSTRAINT [" + constraintName + "]", con); 
         cmdConstraint.ExecuteNonQuery(); 
        } 

       } 
       //con.Close(); 
      } 
     } 
     return; 
    } 
+0

Я первоначально отправил вопрос на эту тему. Мое решение состояло в том, чтобы удалить все ограничения в производственной базе данных. После этого один раз мне никогда не приходилось повторять это, и SQL Server Pivot Producer работал без ошибок. К сожалению, у меня нет точного кода, который я использовал для удаления всех ограничений, но самая важная часть была включена в основу статьи базы знаний. Конечно, я сначала проверю это на резервную копию производственной базы данных. То, что, как я подозревал, вызвало мою проблему, заключалось в том, что Pivot Producers извлекали моментальные снимки виртуального изображения в разные моменты времени. – Dave

+0

У меня есть одна и та же проблема, в то время как я добавил таблицу, имя которой было достаточно близко, чтобы столкнуться с выводом имен ограничений. Возможно ли также, что таблица ПК может пострадать от этого ограничения? Позднее я отправил код, который я написал, чтобы удалить ограничения на БД, но у меня возникла другая проблема с OBJECT_DEFINITION, возвращающим значение null, и «У столбца уже есть привязка к DEFAULT». для столбцов _trackLast *; причина или следствие ...? Я еще не нашел подсказки. –

+0

Это тесно связано с тем, чего мы хотим достичь: http://www.softfluent.com/product/codefluent-entities/knowledge-center/default-constraint-naming-issue –

ответ

0

я пошел для использования конвенции пользовательских имен, используя имя таблицы префиксов сгенерированного имени ограничения.

public class MyNamingConvention : FormatNamingConvention 
    { 
     public override string GetName(INamedObject obj, IDictionary context) 
     { 
      Column column = obj as Column; 
      if (column != null && column.Table != null) 
      { 
       var name = context["name"] as string; 
       if (name != null && (name.StartsWith("DF_"))) 
       { 
        return column.Table.Name + base.GetName(obj, context); 
       } 
      } 
      return base.GetName(obj, context); 
     } 
    } 

В то же время, я также должен был удалить существующие ограничения, чтобы избежать столкновения:

private static void RemoveCodeFluentConstraints(string connectionString) 
    { 

     using (SqlConnection con = new SqlConnection(connectionString)) 
     { 
      con.Open(); 

      // Set up a command with the given query and associate 
      // this with the current connection. 
      using (SqlCommand cmd = new SqlCommand("SELECT c.name, t.name FROM sys.objects c, sys.objects t, sys.schemas s WHERE c.type IN('F', 'PK', 'FK', 'UQ', 'D') AND c.parent_object_id = t.object_id and t.SCHEMA_ID = s.schema_id AND t.type = 'U' AND s.name = 'MySchema' ORDER BY c.type", con)) 
      { 
       using (IDataReader dr = cmd.ExecuteReader()) 
       { 
        using (SqlConnection con1 = new SqlConnection(connectionString)) 
        { 
         con1.Open(); 
         while (dr.Read()) 
         { 
          String constraintName = dr[0].ToString(); 
          String tableName = dr[1].ToString(); 
          if (tableName != null && constraintName != null) 
          { 
           String cmdConstraintSql = "ALTER TABLE [MySchema].[" + tableName + "] DROP CONSTRAINT [" + constraintName + "]"; 
           ActivityLog.Write("Execute " + cmdConstraintSql, ActivityLogsFile); 
           SqlCommand cmdConstraint = new SqlCommand(cmdConstraintSql, con1); 
           cmdConstraint.ExecuteNonQuery(); 
          } 

         } 
         con1.Close(); 
        } 
       } 
      } 
      con.Close(); 
     } 
     return; 
    } 

Другая проблема были связаны с определением поворота файла не определена правильно: Pivot Runner null command

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