Когда я пытаюсь добавить новый элемент в мой EntitySet, я получаю следующее исключение:
Сущность с такой же идентичностью
уже существует в этом EntitySet
Однако, когда я проверяю EntitySet, его количество равно 0.
Есть идеи, почему я получаю эту ошибку, когда набор пуст? Как может сущность уже существовать в наборе, если в наборе нет предметов?
UPDATE
Я сузил это немного больше. Это происходит только в том случае, если я добавляю элемент в набор, удаляю его, а затем снова добавляю. Даже если предмет больше не находится в EntitySet, он все равно как-то его запоминает. Что мне нужно сделать, чтобы забыть?
ОБНОВЛЕНИЕ: Вот некоторые фрагменты кода для используемых классов и логики.
Объекты сервера:
public class PhotoDto
{
[Key]
[Editable(false)]
public int Id { get; set; }
/* clip */
[Include]
[Association("Photo_Destination", "Id", "PhotoId")]
public EntitySet<PhotoDestinationDto> Destinations { get; set; }
}
public class PhotoDestinationDto : BaseDestionationDto
{
[Key]
[Editable(false, AllowInitialValue = true)]
public int PhotoId { get; set; }
[Key]
[Editable(false, AllowInitialValue = true)]
public bool IsAnnotated { get; set; }
[Key]
[Editable(false, AllowInitialValue = true)]
public int DropZoneId { get; set; }
}
public class BaseDestinationDto
{
[Key]
[Editable(false, AllowInitialValue = true)]
public Guid DatabaseUid { get; set; }
[Key]
[Editable(false, AllowInitialValue = true)]
public string Unit { get; set; }
[Key]
[Editable(false, AllowInitialValue = true)]
public string EqCircId { get; set; }
[Key]
[Editable(false, AllowInitialValue = true)]
public string EqType { get; set; }
}
Клиентская GetIdentity () для PhotoDestinationDto:
/// <summary>
/// Computes a value from the key fields that uniquely identifies this entity instance.
/// </summary>
/// <returns>An object instance that uniquely identifies this entity instance.</returns>
public override object GetIdentity()
{
if ((((this._eqCircId == null)
|| (this._eqType == null))
|| (this._unit == null)))
{
return null;
}
return EntityKey.Create(this._dropZoneId, this._eqCircId, this._eqType, this._isAnnotated, this._photoId, this._unit, this._databaseUid);
}
Чтобы удалить целевую сторону фотографии:
PhotoDto photo = GetPhotoDto();
PhotoDestinationDto destToRemove = photo.Destinations.First(x => x.DropZoneId == 1);
photo.Destinations.Remove(destToRemove);
Для добавления фотографии на целевой стороне клиента:
var dest = new PhotoDestinationDto
{
DropZoneId = zoneId,
EqCircId = selectedEqCircId,
EqType = selectedEqType,
Unit = selectedUnit,
PhotoId = id,
DatabaseUid = selectedDatabaseId
};
p.Destinations.Add(dest); // this is where exception is thrown. p.Destinations.Count is 0 here.