2016-04-04 1 views
1

При обновлении существующей схемы с помощью PivotRunner в существующей базе данных я столкнулся с приведенной ниже ошибкой.Команда Pivot Runner null

Я не могу понять, почему view может возвращать пустую команду. Каковы наиболее вероятные случаи? Если вы перейдете к этой ошибке, у меня будет такая же ошибка с процедурой, что я должен проверить?

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

{System.ArgumentNullException: Value cannot be null. 
Parameter name: command 
    at CodeFluent.Runtime.Database.Management.SqlServer.PivotRunner.ExecuteNonQuery(String command, Boolean incrementChangesCount) 
    at CodeFluent.Runtime.Database.Management.SqlServer.PivotRunner.UpdateView(PivotRunnerView view, View existingView) 
    at CodeFluent.Runtime.Database.Management.SqlServer.PivotRunner.Run() 
    at CodeFluentAssociationMigration.MigrateAssociationsDB.migrate(String associationModelPath, String connectionString) in C:\MyPath\MyProgram.cs:line 190 
    at CodeFluentAssociationMigration.Program.Main(String[] args) in C:\MyPath\MyProgram.cs:line 17 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart()} 

Единственный след у меня в лог-файл, как показано ниже:

[04/04/2016 12:18:47] : Checking unique keys... 
[04/04/2016 12:18:47] : Checking views... 

EDIT: Это просмотров элементы моего файла поворота

<views> 
    <view name="vAccount" schema="Association"> 
     CREATE VIEW [Association].[vAccount] 
     AS 
     SELECT [Association].[Account].[Account_AccountId], [Association].[Account].[Account_Label], [Association].[Account].[Account_NumberInt], [Association].[Account].[Account_NumberExt], [Association].[Account].[Account_InitialValue], [Association].[Account].[Account_AccountType_AccountTypeId], [Association].[Account].[Account_AccountCategory_AccountCategoryId], [Association].[Account].[Account_IsUsedByDefault], [Association].[Account].[Account_IsDeactivated], [Association].[Account].[Account_IsReadyForClosure], [Association].[Account].[_rowVersion], [Association].[Account].[_trackCreationTime], [Association].[Account].[_trackLastWriteTime], [Association].[Account].[_trackCreationUser], [Association].[Account].[_trackLastWriteUser] 
     FROM [Association].[Account] 
    </view> 
    <view name="vAccountBalanceHistory" schema="Association"> 
     CREATE VIEW [Association].[vAccountBalanceHistory] 
     AS 
     SELECT [Association].[AccountBalanceHistory].[AccountBalanceHistory_AccountBalanceHistoryId], [Association].[AccountBalanceHistory].[AccountBalanceHistory_AccountingPeriod_AccountingPeriodId], [Association].[AccountBalanceHistory].[AccountBalanceHistory_Account_AccountId], [Association].[AccountBalanceHistory].[AccountBalanceHistory_DebitBalance], [Association].[AccountBalanceHistory].[AccountBalanceHistory_CreditBalance], [Association].[AccountBalanceHistory].[_rowVersion], [Association].[AccountBalanceHistory].[_trackCreationTime], [Association].[AccountBalanceHistory].[_trackLastWriteTime], [Association].[AccountBalanceHistory].[_trackCreationUser], [Association].[AccountBalanceHistory].[_trackLastWriteUser] 
     FROM [Association].[AccountBalanceHistory] 
    </view> 
    <view name="vAccountCategory" schema="Association"> 
     CREATE VIEW [Association].[vAccountCategory] 
     AS 
     SELECT [Association].[AccountCategory].[AccountCategory_AccountCategoryId], [Association].[AccountCategory].[AccountCategory_Number], [Association].[AccountCategory].[AccountCategory_Label], [Association].[AccountCategory].[_rowVersion], [Association].[AccountCategory].[_trackCreationTime], [Association].[AccountCategory].[_trackLastWriteTime], [Association].[AccountCategory].[_trackCreationUser], [Association].[AccountCategory].[_trackLastWriteUser] 
     FROM [Association].[AccountCategory] 
    </view> 
    <view name="vAccountingEntry" schema="Association"> 
     CREATE VIEW [Association].[vAccountingEntry] 
     AS 
     SELECT [Association].[AccountingEntry].[AccountingEntry_AccountingEntryId], [Association].[AccountingEntry].[AccountingEntry_Date], [Association].[AccountingEntry].[AccountingEntry_Label], [Association].[AccountingEntry].[AccountingEntry_Debit], [Association].[AccountingEntry].[AccountingEntry_Credit], [Association].[AccountingEntry].[AccountingEntry_DocumentNumber], [Association].[AccountingEntry].[AccountingEntry_Account_AccountId], [Association].[AccountingEntry].[AccountingEntry_TVA_TVAId], [Association].[AccountingEntry].[AccountingEntry_PaymentMode], [Association].[AccountingEntry].[AccountingEntry_LabelAdditional], [Association].[AccountingEntry].[AccountingEntry_Status], [Association].[AccountingEntry].[AccountingEntry_EntryType], [Association].[AccountingEntry].[_rowVersion], [Association].[AccountingEntry].[_trackCreationTime], [Association].[AccountingEntry].[_trackLastWriteTime], [Association].[AccountingEntry].[_trackCreationUser], [Association].[AccountingEntry].[_trackLastWriteUser] 
     FROM [Association].[AccountingEntry] 
    </view> 
    <view name="vAccountingPeriod" schema="Association"> 
     CREATE VIEW [Association].[vAccountingPeriod] 
     AS 
     SELECT [Association].[AccountingPeriod].[AccountingPeriod_AccountingPeriodId], [Association].[AccountingPeriod].[AccountingPeriod_DateStart], [Association].[AccountingPeriod].[AccountingPeriod_DateEnd], [Association].[AccountingPeriod].[AccountingPeriod_IsClosed], [Association].[AccountingPeriod].[AccountingPeriod_LedgerURL], [Association].[AccountingPeriod].[AccountingPeriod_BalanceURL], [Association].[AccountingPeriod].[AccountingPeriod_ProfitAndLossURL], [Association].[AccountingPeriod].[_rowVersion], [Association].[AccountingPeriod].[_trackCreationTime], [Association].[AccountingPeriod].[_trackLastWriteTime], [Association].[AccountingPeriod].[_trackCreationUser], [Association].[AccountingPeriod].[_trackLastWriteUser] 
     FROM [Association].[AccountingPeriod] 
    </view> 
    <view name="vAccountType" schema="Association"> 
     CREATE VIEW [Association].[vAccountType] 
     AS 
     SELECT [Association].[AccountType].[AccountType_AccountTypeId], [Association].[AccountType].[AccountType_Label], [Association].[AccountType].[AccountType_Group], [Association].[AccountType].[_rowVersion], [Association].[AccountType].[_trackCreationTime], [Association].[AccountType].[_trackLastWriteTime], [Association].[AccountType].[_trackCreationUser], [Association].[AccountType].[_trackLastWriteUser] 
     FROM [Association].[AccountType] 
    </view> 
    <view name="vAssociation" schema="Global"> 
     CREATE VIEW [Global].[vAssociation] 
     AS 
     SELECT [Global].[Association].[Association_AssociationId], [Global].[Association].[Association_PrefectureNumber], [Global].[Association].[Association_NumberExt], [Global].[Association].[Association_Label], [Global].[Association].[Association_IsActive], [Global].[Association].[Association_Schema], [Global].[Association].[_rowVersion], [Global].[Association].[_trackCreationTime], [Global].[Association].[_trackLastWriteTime], [Global].[Association].[_trackCreationUser], [Global].[Association].[_trackLastWriteUser] 
     FROM [Global].[Association] 
    </view> 
    <view name="vAssociationUser" schema="Global"> 
     CREATE VIEW [Global].[vAssociationUser] 
     AS 
     SELECT [Global].[AssociationUser].[AssociationUser_UserId], [Global].[AssociationUser].[AssociationUser_Association_AssociationId], [Global].[AssociationUser].[_rowVersion], [Global].[AssociationUser].[_trackCreationTime], [Global].[AssociationUser].[_trackLastWriteTime], [Global].[AssociationUser].[_trackCreationUser], [Global].[AssociationUser].[_trackLastWriteUser] 
     FROM [Global].[AssociationUser] 
    </view> 
    <view name="vCardPeriod" schema="Global"> 
     CREATE VIEW [Global].[vCardPeriod] 
     AS 
     SELECT [Global].[CardPeriod].[CardPeriod_CardPeriodId], [Global].[CardPeriod].[CardPeriod_FromDate], [Global].[CardPeriod].[CardPeriod_ToDate], [Global].[CardPeriod].[CardPeriod_Season], [Global].[CardPeriod].[CardPeriod_TransferDate], [Global].[CardPeriod].[_rowVersion], [Global].[CardPeriod].[_trackCreationTime], [Global].[CardPeriod].[_trackLastWriteTime], [Global].[CardPeriod].[_trackCreationUser], [Global].[CardPeriod].[_trackLastWriteUser] 
     FROM [Global].[CardPeriod] 
    </view> 
    <view name="vSupplier" schema="Global"> 
     CREATE VIEW [Global].[vSupplier] 
     AS 
     SELECT [Global].[Supplier].[Supplier_SupplierId], [Global].[Supplier].[Supplier_Label], [Global].[Supplier].[Supplier_NumberExt], [Global].[Supplier].[_rowVersion], [Global].[Supplier].[_trackCreationTime], [Global].[Supplier].[_trackLastWriteTime], [Global].[Supplier].[_trackCreationUser], [Global].[Supplier].[_trackLastWriteUser] 
     FROM [Global].[Supplier] 
    </view> 
    <view name="vTVA" schema="Association"> 
     CREATE VIEW [Association].[vTVA] 
     AS 
     SELECT [Association].[TVA].[TVA_TVAId], [Association].[TVA].[TVA_DateStart], [Association].[TVA].[TVA_DateEnd], [Association].[TVA].[TVA_Rate], [Association].[TVA].[_rowVersion], [Association].[TVA].[_trackCreationTime], [Association].[TVA].[_trackLastWriteTime], [Association].[TVA].[_trackCreationUser], [Association].[TVA].[_trackLastWriteUser] 
     FROM [Association].[TVA] 
    </view> 
    </views> 
+0

У вас есть пустое представление в сводном файле (xml или parc)? * Примечание: вы можете переименовать файл .parc в .zip, если это необходимо для его извлечения * – meziantou

+0

Я дважды проверил, но нет .. получил 5 просмотров, каждый из которых имеет правильное определение. У меня был скрипт, работающий до этого, но теперь я получил эту ошибку, а также для процедур, которые, как я полагаю, не имеют пустого определения. –

+0

При удалении всех видов и их воссоздании у меня не возникло проблем, что заставило меня думать, что сгенерировано определение правильное –

ответ

1

Похоже, вы отформатировали XML-документ. Определение представления теперь начинается с новой строки и некоторых пробелов, а поворотному бегуну это не нравится. Есть 2 решения:

  • Не изменять сгенерированный файл (самое простое решение)
  • Использования пользовательского поворота бегун, как указано ниже, что урежет подходы к определению

В этом коде мы создаем класс, который наследует от PivotRunner, и мы меняем определение представлений, процедур и функций.

using CodeFluent.Runtime; 
using CodeFluent.Runtime.Database.Management.SqlServer; 
using System; 
using System.Xml; 

public class CustomPivotRunner : PivotRunner 
{ 
    public CustomPivotRunner(string packageFilePath) : base(packageFilePath) 
    { 
    } 

    protected override PivotRunnerProcedure NewProcedure(XmlElement element) 
    { 
     return new CustomPivotRunnerProcedure(this, element); 
    } 

    protected override PivotRunnerView NewView(XmlElement element) 
    { 
     return new CustomPivotRunnerView(this, element); 
    } 

    protected override PivotRunnerFunction NewFunction(XmlElement element) 
    { 
     return new CustomPivotRunnerFunction(this, element); 
    } 
} 

public class CustomPivotRunnerProcedure : PivotRunnerProcedure 
{ 
    public CustomPivotRunnerProcedure(PivotRunner runner, XmlElement element) : base(runner, element) 
    { 
     Definition = Definition?.Trim(); 
    } 
} 

public class CustomPivotRunnerFunction : PivotRunnerFunction 
{ 
    public CustomPivotRunnerFunction(PivotRunner runner, XmlElement element) : base(runner, element) 
    { 
     Definition = Definition?.Trim(); 
    } 
} 

public class CustomPivotRunnerView : PivotRunnerView 
{ 
    public CustomPivotRunnerView(PivotRunner runner, XmlElement element) : base(runner, element) 
    { 
     Definition = Definition?.Trim(); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var logger = new Logger(); 
     PivotRunner pivotRunner = new CustomPivotRunner(@"MyModelpivot.xml"); 
     pivotRunner.ConnectionString = CodeFluentContext.Get("Sample").Persistence.ConnectionString; 
     pivotRunner.Logger = logger; 
     pivotRunner.Action += PivotRunner_Action; 
     pivotRunner.Run(); 
    } 

    private static void PivotRunner_Action(object sender, PivotRunnerEventArgs e) 
    { 
     Console.WriteLine(e.Type + " " + e.Options); 
    } 

    public class Logger : IServiceHost 
    { 
     public void Log(object value) 
     { 
      Console.WriteLine(value); 
     } 
    } 
} 
+0

Большое спасибо за вашу поддержку, решение красивое и чистое. Я побежал дважды в качестве поворотника: в первый раз определение просмотров и процедур было обновлено, во второй раз оно не изменилось (как и ожидалось). –

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