Я решил свою проблему. Проблема связана с другим свойством объекта Product.
private bool _isFreeShippingInitialValue;
public bool IsFreeShipping
{
get
{
return _isFreeShippingInitialValue ||
computedValueFromAnotherChildObject;
}
set
{
_isFreeShippingInitialValue = value;
}
}
Мы заметили, что когда вы впервые получаете объект Product, вызывается IsFreeShipping.get
(не знаю почему) перед загрузкой дочерних объектов. Например, если _isFreeShippingInitialValue
равно false, а computedValueFromAnotherChildObject
- true, IsFreeShipping
сначала возвращает false (поскольку computedValueFromAnotherChildObject
- сначала false, поскольку дочерние объекты не были загружены), а затем true при следующей попытке получить * 1009. *. Это заставляет EF думать, что значение изменилось.
Первый элемент, который мы добавили к WishListItems
, работал нормально. Это был второй предмет, который сломался. Мы считаем, что SaveChanges()
(или что-то до этого) загрузило Продукт для первого WishListItem
. SaveChanges()
разбивал Продукт первого WishListItem
, когда мы добавляли второй элемент.
Итак, короче, будьте осторожны при вычислении значений в Property.get
с использованием дочерних объектов, потому что это может укусить вас в задницу.