我正在使用自定義庫爲我生成類似於實體框架但不完全相同的DAL,並且使用RIA強加給它的問題。我的問題是,自定義DAL生成一個IsPersisted屬性,它基本上標識實體是否具有相應的數據庫記錄。刪除代碼的關鍵部分看起來像...SIlverlight 5 RIA組合子實體刪除
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實際上包含該缺陷。它正確地公開了原始實體和值,但是然後在變更集的刪除段中,我可以看到同樣的實體(通過相同的身份驗證)再次指定爲OriginalEntity,但是這次除ID之外,所有的值都是空的。
如果我跟蹤ChangeSet的反序列化,我可以看到它實際上創建了Child的兩個單獨實例,首先正確填充,然後再次清零。 ChangeSet然後只保存孩子的零化版本。
有關如何解決RIA發送電線的任何想法?