Не работает со службами Ria, а исключительно с WCF (не знаю, имеет ли это большое значение ...). Прежде всего вам не нужно выполнять команду (на стороне сервера) для запуска отслеживания сущностей, это делается автоматически с десериализацией WCF.
[OnDeserialized]
public void OnDeserializedMethod(StreamingContext context)
{
IsDeserializing = false;
ChangeTracker.ChangeTrackingEnabled = true;
}
Второе, что мне известно, это то, что только свойства первичного и внешнего ключа объекта отслеживания SELF записываются при изменении. это не относится к НОРМАЛЬНЫМ сущностям, которые продолжают жить в контексте сущности (тогда все изменения записываются).
Если вы посмотрите на Само-отслеживающуюся сущность поближе, вы можете увидеть что-то вроде этого:
[DataMember]
public string Plaats
{
get { return _plaats; }
set
{
if (_plaats != value)
{
_plaats = value;
OnPropertyChanged("Plaats");
}
}
}
private string _plaats;
[DataMember]
public int LandID
{
get { return _landID; }
set
{
if (_landID != value)
{
ChangeTracker.RecordOriginalValue("LandID", _landID);
if (!IsDeserializing)
{
if (Land != null && Land.ID != value)
{
Land = null;
}
}
_landID = value;
OnPropertyChanged("LandID");
}
}
}
private int _landID;
Вы видите разницу? между простым свойством Plaats и внешним ключом собственности LandID? Он находится в строке `ChangeTracker.RecordOriginalValue (" LandID ", _landID);
Для простых свойств эти изменения не записываются (свойства themseklves отклоняются от курса, поэтому контекст EF знает, как применять ApplyChanges и обновлять базу данных).
Возможные идеи:
- Чтобы настроить шаблон T4 для записи исходных значений для каждого свойства
- Чтобы вывести все сущности из базового класса, в котором можно было бы установить некоторую платформу для записи исходных значений, отвечая на события propertyChanged
- При обновлении объектов сначала получите исходные значения из базы данных и отследите изменения
Надеюсь, это поможет!