2012-10-31 78 views
1

我正在使用自定義庫爲我生成類似於實體框架但不完全相同的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發送電線的任何想法?

回答

0

這是我通過將[RoundtripOriginal]應用於IsPersisted屬性來解決的特定問題。