例如我有一个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());
谢谢!
答案 0 :(得分:2)
是的,您必须刷新缓存的客户端副本,以便新添加的Id字段存在。
正如概念验证一样,请尝试以下代码:
private void AddTestItem()
{
var key = _TestDomainContext.TestItems.Max(c=> c.Id) + 1;
SomeList.Add(new TestItem(){Id = key});
}
这将解决冲突但不是正确的方法,最好在提交后再次刷新/加载查询。