Предполагая, что ваш класс Mitarbeiter
имеет свойство навигации для Client
, и оно не равно нулю, когда вы проходите через цикл (поэтому item.Client != null
), затем, добавив item
в ObjectSet, вы также добавляете ссылку Client
в контекст в состоянии Added
. (Добавление сущности добавляет не только саму сущность, но и все ссылочные сущности, которые еще не находятся в контексте.) Позже (context.Clients.First(c => c.ClID == oClient.ClID);
) вы загружаете клиента второй раз, который уже находится в контексте в состоянии Added
, которое является причиной исключения.
Попробуйте загрузить клиент в контекст до , который вы добавите item
:
public void UpdateClient(Client oClient)
{
context.Clients.First(c => c.ClID == oClient.ClID);
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.ApplyCurrentValues(oClient);
context.SaveChanges();
}
Просто предположение, я не уверен, решит ли это вашу проблему.