Exemplo n.º 1
0
        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.
                    }
                }
            });
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 6
0
 private static string GetModelNameFromDeletedEntityEntry(ObjectStateEntry entry)
 {
     return(entry.GetUpdatableOriginalValues().DataRecordInfo.RecordType.EdmType.Name);
 }
Exemplo n.º 7
0
 public DbUpdatableDataRecord GetUpdatableOriginalValues()
 {
     return(_stateEntry.GetUpdatableOriginalValues());
 }