1

この問題をライトスイッチ フォーラムに投稿しましたが、何も得られませんでした。Lightswitch をあきらめる前に、もう一度試してみようと思いました。

適切に定義されたリレーショナル制約を使用して、Sql Server データベースに対して削除を実装しています。さまざまな理由から、これらの関係に対してカスケード削除を指定することはできません。

1 つのエンティティ タイプを正常に削除しているため、私のアプローチは正しいようです。エンティティの削除イベントで、関連するすべての子を次のように削除しています。

entity.simpleChild.Delete();

foreach (var child in entity.complexChild)
{
    ((IEntityObject)child).Delete();
}

foreach (var child in entity.ChildWithGrandChildren)
{
    foreach (var grandChild in child.Children)
    {
        ((IEntityObject)grandChild).Delete();
    }
    child.Delete();
}

ただし、エンティティ タイプの 1 つが失敗しています。このエンティティには孫がいますが、それらも削除します。それだけでなく、孫の削除をコメントアウトして、関連する孫を持たないエンティティを削除しようとすると、同じエラーが発生します。動作する TSQL スクリプトと同じ順序ですべてを削除しています。ただし、実行時に次のエラーが発生します。

操作に失敗しました: 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。

データベースをプロファイリングすると、多くの選択が表示されますが、削除の試みは見られないため、Lightswitchは問題があると考えています。問題がどこにあるかを把握するにはどうすればよいですか? モデルからさまざまな関連エンティティを削除しても、別のメッセージは生成されません。

4

2 に答える 2

0

VSLightSwitchアプリケーションのPerson-Child-Grandchildの3つの部分の関係を正常に削除できるサンプルコードを次に示します。SQLサーバーのテーブル定義では、例のようにDELETENOACTIONを使用しています。

    partial void People_Deleting(Person entity)
    {
        foreach (var child in entity.Children)
        {
            foreach (var grandchild in child.GrandChildQuery)
            {
                ((IEntityObject)grandchild).Delete();
            }

            child.Delete();
        }
    }

このコードは、あなたが投稿したサンプルコードとは構造が異なるという事実に驚いています。特に、このコードには、中間の子エンティティから孫を削除する内部ループがあります。内部ループがないため、サンプルに表示されていない孫を削除するための別の戦略が必要であるか、それが問題です。

于 2011-09-12T17:21:47.617 に答える
0

私は同じ問題を抱えており、別の開発者が子の削除イベントと削除イベントにコードを配置し、このコードがエラーを引き起こしたことを発見しました。

これが同じ問題に直面している他の人に役立つことを願っています。

于 2013-10-25T12:01:14.120 に答える