private static void UpdateOriginalValues(ObjectStateEntry entry, EntityInfo entityInfo) { var originalValuesMap = entityInfo.OriginalValuesMap; if (originalValuesMap == null || originalValuesMap.Keys.Count == 0) { return; } var originalValuesRecord = entry.GetUpdatableOriginalValues(); originalValuesMap.ToList().ForEach(kvp => { var propertyName = kvp.Key; var originalValue = kvp.Value; try { entry.SetModifiedProperty(propertyName); if (originalValue is JObject) { // only really need to perform updating original values on key properties // and a complex object cannot be a key. } else { var ordinal = originalValuesRecord.GetOrdinal(propertyName); var fieldType = originalValuesRecord.GetFieldType(ordinal); var originalValueConverted = ConvertValue(originalValue, fieldType); if (originalValueConverted == null) { // bug - hack because of bug in EF - see // http://social.msdn.microsoft.com/Forums/nl/adodotnetentityframework/thread/cba1c425-bf82-4182-8dfb-f8da0572e5da var temp = entry.CurrentValues[ordinal]; entry.CurrentValues.SetDBNull(ordinal); entry.ApplyOriginalValues(entry.Entity); entry.CurrentValues.SetValue(ordinal, temp); } else { originalValuesRecord.SetValue(ordinal, originalValueConverted); } } } catch (Exception e) { if (e.Message.Contains(" part of the entity's key")) { throw; } else { // this can happen for "custom" data entity properties. } } }); }
private int GetPropertyIndex(ObjectStateEntry entry, string propertyName) { OriginalValueRecord record = entry.GetUpdatableOriginalValues(); for (int i = 0; i != record.FieldCount; i++) { FieldMetadata metaData = record.DataRecordInfo.FieldMetadata[i]; if (metaData.FieldType.Name == propertyName) { return(metaData.Ordinal); } } return(-1); }
private void Merge_Click(object sender, EventArgs e) { ApplyChanges = true; object version = _entry.OriginalValues["Version"]; _entry.ChangeState(EntityState.Unchanged); _entry.GetUpdatableOriginalValues().SetValue(_entry.OriginalValues.GetOrdinal("Version"), version); foreach (TreeNode node in tree.Nodes) { if (node.Checked) { _entry.SetModifiedProperty(node.Tag.ToString()); } } Close(); }
private static void UpdateOriginalValues(ObjectStateEntry entry, EntityInfo entityInfo) { var originalValuesMap = entityInfo.OriginalValuesMap; if (originalValuesMap == null || originalValuesMap.Keys.Count == 0) { return; } var originalValuesRecord = entry.GetUpdatableOriginalValues(); originalValuesMap.ToList().ForEach(kvp => { var propertyName = kvp.Key; var originalValue = kvp.Value; try { entry.SetModifiedProperty(propertyName); if (originalValue is JObject) { // only really need to perform updating original values on key properties // and a complex object cannot be a key. } else { var ordinal = originalValuesRecord.GetOrdinal(propertyName); var fieldType = originalValuesRecord.GetFieldType(ordinal); var originalValueConverted = ConvertValue(originalValue, fieldType); originalValuesRecord.SetValue(ordinal, originalValueConverted); } } catch (Exception e) { if (e.Message.Contains(" part of the entity's key")) { throw; } else { // this can happen for "custom" data entity properties. } } }); }
void IDataServiceUpdateProvider.SetConcurrencyValues(object resourceCookie, bool?checkForEquality, IEnumerable <KeyValuePair <string, object> > concurrencyValues) { if (checkForEquality == null) { throw new DataServiceException(500, "Cannot perform operation without ETag."); } if (!checkForEquality.Value) { throw new DataServiceException(500, "IfNoneMatch header not supported in update and delete."); } ObjectStateEntry objectStateEntry = CurrentDataSource.ObjectContext.ObjectStateManager.GetObjectStateEntry(resourceCookie); OriginalValueRecord originalValues = objectStateEntry.GetUpdatableOriginalValues(); foreach (KeyValuePair <string, object> etag in concurrencyValues) { int propertyOrdinal = originalValues.GetOrdinal(etag.Key); originalValues.SetValue(propertyOrdinal, etag.Value); } }
private static string GetModelNameFromDeletedEntityEntry(ObjectStateEntry entry) { return(entry.GetUpdatableOriginalValues().DataRecordInfo.RecordType.EdmType.Name); }
public DbUpdatableDataRecord GetUpdatableOriginalValues() { return(_stateEntry.GetUpdatableOriginalValues()); }