У меня есть некоторый код, подобный этому, в веб-методе WCF,
List<LocationInRoad> locationInRoad = new List<LocationInRoad>();
foreach (CarWorkLocationLink locationLink in source.CarWorkLocationLinks)
{
locationInRoad.Add(LocationInRoadMapper.MapTo(locationLink.CarWorkLocationType.WorkLocationTypeID));
}
destination.LocationInRoad = locationInRoad.ToArray();
Иногда (возможно, один раз в неделю) при производстве возникает ошибка,
InvalidOperationException has occured Message: Collection was modified; enumeration operation may not execute.
Так что, похоже,говорите мне, что коллекция 'source.CarWorkLocationLinks' была изменена частично путем перечисления списка в цикле foreach.
Таким образом, для объяснения, "источник" является сущностью структуры сущности, загруженной из нашей базы данных, и 'CarWorkLocationLinks'определяется для этой сущности следующим образом:
[XmlIgnoreAttribute()]
[SoapIgnoreAttribute()]
[DataMemberAttribute()]
[EdmRelationshipNavigationPropertyAttribute("CarManagerModel", "FK_CarWorkLocationLink_CarDetail", "CarWorkLocationLink")]
public EntityCollection<CarWorkLocationLink> CarWorkLocationLinks
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<CarWorkLocationLink>("CarManagerModel.FK_CarWorkLocationLink_CarDetail", "CarWorkLocationLink");
}
set
{
if ((value != null))
{
((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<CarWorkLocationLink>("CarManagerModel.FK_CarWorkLocationLink_CarDetail", "CarWorkLocationLink", value);
}
}
}
Т.е. это отношение сущности к другой таблице.Поэтому я предполагаю, что вопрос заключается в том, можно ли изменить EntityCollection после его загрузки, если что-то в базе данных изменится?
Таким образом, в целом приведенный выше код вписывается в вызов WCF, например,
public APIEntity WCFCall(parameters)
{
using (EntityContext context = new EntityContext())
{
// loading entity (database entity that is)
// creating API entity (this is a POCO object to control what is exposed over the WCF service)
// running the loop as shown above on the 'loaded entity' and popluating fields in the poco object
// returning the poco object
}
}
Так что я не уверен, почему упомянутая ошибка должна возникать.Является самодостаточным.