实体关系对象更新

时间:2011-05-18 11:54:14

标签: entity-framework

请你告诉我我哪里错了。我有以下代码:

public void UpdateClient(Client oClient)
    {                                        
        foreach(Mitarbeiter item in oClient.Mitarbeiters)
        {
            if (item.MiID==0)
            {                    
                context.Mitarbeiters.AddObject(item);                    
            }
            else {
                var key = context.CreateEntityKey("Mitarbeiters",item);
                object original;
                if (context.TryGetObjectByKey(key,out original))
                {
                    context.ApplyCurrentValues(key.EntitySetName,item);
                }
            }
        }
        context.Clients.First(c => c.ClID == oClient.ClID);            
        context.Clients.ApplyCurrentValues(oClient);


       context.SaveChanges();

} 我收到了

  

ObjectStateManager中已存在具有相同键的对象。 ObjectStateManager无法使用相同的键跟踪多个对象。

当我向Mitarbeiters添加一个新对象时

1 个答案:

答案 0 :(得分:0)

假设您的班级Mitarbeiter具有Client的导航属性,并且当您通过循环(item.Client != null)时它不为空,那么通过添加item来您还可以在ObjectSet中将引用的Client添加到状态Added的上下文中。 (添加实体不仅会添加实体本身,还会添加尚未在上下文中的所有引用实体。)稍后(context.Clients.First(c => c.ClID == oClient.ClID);)您第二次加载客户端,该客户端已经在{{1状态是异常的原因。

尝试在添加Added之前将客户端加载到上下文中:

item

只是猜测,我不确定这是否能解决您的问题。