0

プロジェクト タスクを含むデータベース テーブルがあります。各タスクは、同じテーブルに格納されているタスク テンプレートに基づいています。タスクは、特に指定されていない限り、関連するタスク テンプレート レコードからプロパティ/フィールドを継承します。このテーブルのデータモデルに自己参照関連付けを作成しました - TaskTemplateId はテンプレートの ID を指します。

私はたくさんの問題を抱えています。テーブル内のデータを変更していない場合でも、更新時に ChangeConflicException が発生します。

理論的に、私はこれを正しい方法で行っていますか? 誰かが以前にこれら2つの問題に直面したことがありますか?

列名 X が結果列リストに複数回表示されます。

プロパティの例を次に示します。

    public int NumberOfUnits
    {
        get
        {
            //If this is a task template return the actual database value
            if (IsTaskTemplate)
                return NumberOfUnitsPrivate;
            //If there is a task template override and NumberOfUnits has a value return that
            else if (IsTemplateOverride && NumberOfUnitsPrivate != 0)
                return NumberOfUnitsPrivate;

            //Else return the value in the task template record.
            if (TaskTemplateRecord != null)
                return TaskTemplateRecord.NumberOfUnitsPrivate;
            return 0;
        }
        set { NumberOfUnitsPrivate = value; }
    }

いくつかのメモ:

  • このテーブルのすべての非 PK 列で UpdateCheck を never に設定しました。

編集:したがって、LINQ がサーバーに送信している更新ステートメントは次のとおりです。

exec sp_executesql N'UPDATE [dbo].[ProjectTasks]
SET [NarrativeSourceTypeId] = @p0, [BillNarrative] = @p1
WHERE 0 = 1',N'@p0 nvarchar(4000),@p1 nvarchar(4000)',@p0=N'',@p1=N''

それは奇妙ではありませんか?どこで 0 = 1? 以下のコードは、サーバーからプロジェクト タスクを取得しています。update ステートメントの後で、このコードを 4 回起動します。

exec sp_executesql N'SELECT [t0].[Id], [t0].[IsActive], [t0].[CmsMatterUno], [t0].[ProjectCategoryId], [t0].[ProjectStatusTypeId], [t0].[ProjectTemplateId], [t0].[Code], [t0].[Description], [t0].[StartDate], [t0].[FinishDate], [t0].[CreatedDate], [t0].[CreatedBy], [t0].[ModifiedDate], [t0].[ModifiedBy], [t1].[Id] AS [Id2], [t1].[IsActive] AS [IsActive2], [t1].[OrderBy], [t1].[ProjectTemplateId] AS [ProjectTemplateId2], [t1].[ProjectId], [t1].[ParentTaskId], [t1].[ProjectCategoryId] AS [ProjectCategoryId2], [t1].[IsTaskTemplate], [t1].[TaskTemplateId], [t1].[UnitTypeId] AS [UnitTypeIdPrivate], [t1].[DescriptionQualifierTypeId], [t1].[NarrativeSourceTypeId] AS [NarrativeSourceTypeIdPrivate], [t1].[CmsPhTaskUno] AS [CmsPhTaskUnoPrivate], [t1].[CmsBillTranUno], [t1].[Code] AS [Code2], [t1].[Description] AS [Description2], [t1].[IsPricingLevel], [t1].[IsCostingLevel], [t1].[NumberOfUnits] AS [NumberOfUnitsPrivate], [t1].[UnitPrice] AS [UnitPricePrivate], [t1].[StartDate] AS [StartDate2], [t1].[CompletionDate], [t1].[BillNarrative] AS [BillNarrativePrivate], [t1].[IsTemplateOverride], [t1].[BillingDate], [t1].[IsApprovalRequired], [t1].[IsTimeAssigned], [t1].[IsSummTimeOnBill], [t1].[IsAllowTime], [t1].[IsAllowBill], [t1].[IsAllowDisb], [t1].[CreatedDate] AS [CreatedDate2], [t1].[CreatedBy] AS [CreatedBy2], [t1].[ModifiedDate] AS [ModifiedDate2], [t1].[ModifiedBy] AS [ModifiedBy2], (
    SELECT COUNT(*)
    FROM [dbo].[ProjectTasks] AS [t2]
    WHERE [t2].[ProjectId] = [t0].[Id]
    ) AS [value]
FROM [dbo].[Projects] AS [t0]
LEFT OUTER JOIN [dbo].[ProjectTasks] AS [t1] ON [t1].[ProjectId] = [t0].[Id]
WHERE [t0].[CmsMatterUno] = @x2
ORDER BY [t0].[Id], [t1].[Id]',N'@x1 int,@x2 int',@x1=360930,@x2=536674

update ステートメントは、UserControl 内の LinqDataSource によって起動されています。カスタム プロパティを除いて、すべてがマークアップで行われます。その例を一番上に示します。

いつもお世話になっております。

4

0 に答える 0