Silverlight WCF RIA,将项添加到EntityList并提交domaincontext更改

时间:2011-06-01 12:59:14

标签: silverlight wcf-ria-services

例如我有一个TestItem实体:

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

并使用list查看模型,我们将向此列表中添加新项的方法,以及我们将调用_TestDomainContext.SubmitChanges

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

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

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

现在,在将第一个项目添加到列表并调用SubmitChanges()之后,一切都运行正常,但是当我尝试添加第二个项目时,我得到了异常: 此EntitySet中已存在具有相同标识的实体。

是摆脱这个的唯一方法是手动刷新OnSubmitComplete回调中的SomeList,即:

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

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,您必须刷新缓存的客户端副本,以便新添加的Id字段存在。

正如概念验证一样,请尝试以下代码:

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

这将解决冲突但不是正确的方法,最好在提交后再次刷新/加载查询。