2011-06-01 51 views
1

例如我有一個TestItem實體:Silverlight的WCF RIA,增加項目EntityList並提交domaincontext改變

public class TestItem 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

與列表視圖模型,方法,我們將添加新項目到這個列表,和方法,我們會打電話給_TestDomainContext.SubmitChanges

EntityList<TestItem> SomeList = new EntityList<TestItem>(_TestDomainContext.TestItems); 

private void AddTestItem() 
{ 
    SomeList.Add(new TestItem()); 
} 

private void SubmitChanges() 
{ 
    _TestDomainContext.SubmitChanges(); 
} 

而現在,經過的第一個項目被添加到列表和的SubmitChanges()被調用一切完美,但是當我嘗試添加第二項我得到異常: 具有相同身份的實體已被讀取y存在於此EntitySet中。

是擺脫的,這是手動刷新SomeList在OnSubmitComplete回調即:

_TestDomainContext.TestItems.Clear(); 
_TestDomainContext.Load(_TestDomainContext.GetTestItemsQuery()); 

謝謝唯一的出路!

+0

是數據庫中的自動增量? – 2011-06-01 14:38:54

+0

jep。 ID是在數據庫中的自動增量 – shkipper 2011-06-01 19:21:17

回答

2

是的,你必須刷新緩存的客戶端副本,以便新添加的Id字段在那裏。

正如概念證明試試下面的代碼:

private void AddTestItem() 
{  
    var key = _TestDomainContext.TestItems.Max(c=> c.Id) + 1; 
    SomeList.Add(new TestItem(){Id = key}); 
} 

這將解決衝突,但沒有這樣做的正確的方式,它是最好的刷新/後再次加載查詢提交。