请你告诉我我哪里错了。我有以下代码:
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添加一个新对象时
答案 0 :(得分:0)
假设您的班级Mitarbeiter
具有Client
的导航属性,并且当您通过循环(item.Client != null
)时它不为空,那么通过添加item
来您还可以在ObjectSet中将引用的Client
添加到状态Added
的上下文中。 (添加实体不仅会添加实体本身,还会添加尚未在上下文中的所有引用实体。)稍后(context.Clients.First(c => c.ClID == oClient.ClID);
)您第二次加载客户端,该客户端已经在{{1状态是异常的原因。
尝试在添加Added
之前将客户端加载到上下文中:
item
只是猜测,我不确定这是否能解决您的问题。