Я получаю сообщение об ошибке при попытке добавить в EntitySet на стороне клиента.Следующий код периодически завершается сбоем в методе Add
.
// On the DB side this has a primary key field of IDENTITY(1,1) called Id
var map = new EpisodeDictionaryMap();
map.DictionaryName = dictionary; // String
map.Section = section; // String
map.DictionaryVersion = version; // Int32
episode.EpisodeDictionaryMap.Add(map);
Я также вызываю Clear()
в EntitySets для Episode
и EpisodeDictionaryMap
(среди прочих) не перед каждым вызовом этогокод, но время от времени, когда пользователь переходит на другой экран в приложении.Это недавнее изменение, поэтому оно может быть частью проблемы.
После изучения коллекции EpisodeDictionaryMap в DomainContext может показаться, что иногда существует несколько «новых» экземпляров EpisodeDictionaryMap, каждый с идентификатором 0
, как и следовало ожидать до сохранения, и в этих случаях сохранение завершается без проблем, и правильные идентификаторы назначаются объектам на стороне клиента.
Учитывая, что это не кажется проблемой дляиметь несколько записей с идентификатором 0
в EntitySet одновременно (по крайней мере, пока они находятся в «новом» состоянии), я не понимаю, что пытается сообщить мне сообщение об ошибке.
Я заметил, что в некоторых связанных с этим вопросах СО может возникнуть проблема с Композицией, однако я ее не использую.За исключением самой ссылки на Эпизод, также нет других ссылок на внешние ключи, которые также иногда вызывают эту ошибку.
Предложения, мысли?Большое спасибо!
Редактировать :
Полное исключение (нет внутреннего исключения)
System.InvalidOperationException occurred
Message=An entity with the same identity already exists in this EntitySet.
StackTrace:
at System.ServiceModel.DomainServices.Client.EntitySet.AddInternal(Entity entity)
at System.ServiceModel.DomainServices.Client.EntitySet.<Add>b__5(EntitySet l, Entity e)
at System.ServiceModel.DomainServices.Client.EntitySet.AddAttachInferrer.Visit(Entity entity)
at System.ServiceModel.DomainServices.Client.EntitySet.AddAttachInferrer.VisitEntityCollection(IEntityCollection entityCollection, PropertyInfo propertyInfo)
at System.ServiceModel.DomainServices.Client.EntityVisitor.Visit(Entity entity)
at System.ServiceModel.DomainServices.Client.EntitySet.AddAttachInferrer.Visit(Entity entity)
at System.ServiceModel.DomainServices.Client.EntitySet.AddAttachInferrer.VisitEntityRef(IEntityRef entityRef, Entity parent, PropertyInfo propertyInfo)
at System.ServiceModel.DomainServices.Client.EntityVisitor.Visit(Entity entity)
at System.ServiceModel.DomainServices.Client.EntitySet.AddAttachInferrer.Visit(Entity entity)
at System.ServiceModel.DomainServices.Client.EntitySet.AddAttachInferrer.VisitEntityRef(IEntityRef entityRef, Entity parent, PropertyInfo propertyInfo)
at System.ServiceModel.DomainServices.Client.EntityVisitor.Visit(Entity entity)
at System.ServiceModel.DomainServices.Client.EntitySet.AddAttachInferrer.Visit(Entity entity)
at System.ServiceModel.DomainServices.Client.EntitySet.AddAttachInferrer.Infer(EntityContainer container, Entity entity, Action`2 action)
at System.ServiceModel.DomainServices.Client.EntitySet.Add(Entity entity)
at System.ServiceModel.DomainServices.Client.EntityCollection`1.Add(TEntity entity)
at TangoSoft.Client.EpisodeExtensions.SaveDictionaryVersion(Episode episode, String dictionary, String section, Int32 version)