Entity Frameworkと同様にDALを生成するカスタムライブラリを使用していますが、同じではなく、RIAによって課せられたDALの使用に問題があります。私の問題は、カスタムDALがIsPersistedプロパティを生成し、エンティティが対応するDBレコードを持っているかどうかを本質的に識別することです。削除コードの重要な部分は次のようになります...
if(this.IsPersisted)
dataAccessor.Delete();
else
throw new NotSupportedException("Delete not supported on unpersisted entities.");
問題は、RIAを使用してクライアントとサーバー間のメディアを生成するときに発生します。私は次のような子構成プロパティを持つ親クラスを持っています
class Parent{
...
[Include,Association("Parent_Child","ParentId","ParentId",IsForeignKey=false), Composition]
public List<Child> Children{get{return (_children = _children??new List<Child>());}}
}
クライアントコードではparent.Children.Remove(child);
、正しいエンティティアクションを使用すると、サーバーにアクションが中継されますがIsPersisted
、変更セットが生成されるとフラグがfalseに変更され、その結果、が発生しNotSupportedException
ます。
私はたくさんの掘り下げと探索をしました。サーバーに戻る実際のネットワークトラフィックを調べた後、サーバーに送信されているChangeSetに実際に欠陥が含まれていることがわかりました。元のエンティティと値を正しく公開しますが、チェンジセットのDeleteセグメントで、OriginalEntityとして再度指定された同じエンティティ(同じIDで確認済み)を確認できますが、今回はIDを除くすべての値が空です。
ChangeSetの逆シリアル化をトレースすると、Childの2つの別個のインスタンスが実際に作成され、最初は正しく入力され、次に再びゼロに設定されていることがわかります。その場合、ChangeSetは、ゼロ化されたバージョンの子のみを保持します。
RIAが送信しているものを修正する方法について何かアイデアはありますか?