public void Adds_new_values_to_list_if_not_found_index_is_passed_otherwise_updates_current_entry() { var entry = new EntityEntry(); var userObject1 = new object(); var metadata1 = new StateManagerMemberMetadata(); entry.AddOriginalValueAt(-1, metadata1, userObject1, 1); var userObject2 = new object(); var metadata2 = new StateManagerMemberMetadata(); entry.AddOriginalValueAt(-1, metadata2, userObject2, 2); var userObject3 = new object(); var metadata3 = new StateManagerMemberMetadata(); entry.AddOriginalValueAt(-1, metadata3, userObject3, 3); Assert.Equal(0, entry.FindOriginalValueIndex(metadata1, userObject1)); Assert.Equal(1, entry.FindOriginalValueIndex(metadata2, userObject2)); Assert.Equal(2, entry.FindOriginalValueIndex(metadata3, userObject3)); Assert.Equal(1, entry.GetOriginalEntityValue(null, metadata1, 0, userObject1, ObjectStateValueRecord.OriginalReadonly, 0)); Assert.Equal(2, entry.GetOriginalEntityValue(null, metadata2, 0, userObject2, ObjectStateValueRecord.OriginalReadonly, 0)); Assert.Equal(3, entry.GetOriginalEntityValue(null, metadata3, 0, userObject3, ObjectStateValueRecord.OriginalReadonly, 0)); entry.AddOriginalValueAt(1, metadata2, userObject2, 7); Assert.Equal(1, entry.FindOriginalValueIndex(metadata2, userObject2)); Assert.Equal(7, entry.GetOriginalEntityValue(null, metadata2, 0, userObject2, ObjectStateValueRecord.OriginalReadonly, 0)); }
protected override void SetRecordValue(int ordinal, object value) { StateManagerMemberMetadata managerMemberMetadata = this._metadata.Member(ordinal); if (managerMemberMetadata.IsComplex) { throw new InvalidOperationException(Strings.ObjectStateEntry_SetOriginalComplexProperties((object)managerMemberMetadata.CLayerName)); } object newFieldValue = value ?? (object)DBNull.Value; EntityEntry cacheEntry = this._cacheEntry as EntityEntry; EntityState state = cacheEntry.State; if (!cacheEntry.HasRecordValueChanged((DbDataRecord)this, ordinal, newFieldValue)) { return; } if (managerMemberMetadata.IsPartOfKey) { throw new InvalidOperationException(Strings.ObjectStateEntry_SetOriginalPrimaryKey((object)managerMemberMetadata.CLayerName)); } Type clrType = managerMemberMetadata.ClrType; if (DBNull.Value == newFieldValue && clrType.IsValueType() && !managerMemberMetadata.CdmMetadata.Nullable) { throw new InvalidOperationException(Strings.ObjectStateEntry_NullOriginalValueForNonNullableProperty((object)managerMemberMetadata.CLayerName, (object)managerMemberMetadata.ClrMetadata.Name, (object)managerMemberMetadata.ClrMetadata.DeclaringType.FullName)); } base.SetRecordValue(ordinal, value); if (state == EntityState.Unchanged && cacheEntry.State == EntityState.Modified) { cacheEntry.ObjectStateManager.ChangeState(cacheEntry, state, EntityState.Modified); } cacheEntry.SetModifiedPropertyInternal(this.GetPropertyIndex(ordinal)); }
public void Returns_not_found_if_no_original_values_exist() { var entry = new EntityEntry(); var userObject = new object(); var metadata = new StateManagerMemberMetadata(); entry.AddOriginalValueAt(-1, metadata, userObject, 1); Assert.Equal(-1, entry.FindOriginalValueIndex(new StateManagerMemberMetadata(), userObject)); Assert.Equal(-1, entry.FindOriginalValueIndex(metadata, new object())); Assert.Equal(0, entry.FindOriginalValueIndex(metadata, userObject)); }
internal StateManagerTypeMetadata(EdmType edmType, ObjectTypeMapping mapping) { DebugCheck.NotNull(edmType); Debug.Assert( Helper.IsEntityType(edmType) || Helper.IsComplexType(edmType), "not Complex or EntityType"); Debug.Assert( ReferenceEquals(mapping, null) || ReferenceEquals(mapping.EdmType, edmType), "different EdmType instance"); _typeUsage = TypeUsage.Create(edmType); _recordInfo = new DataRecordInfo(_typeUsage); var members = TypeHelpers.GetProperties(edmType); _members = new StateManagerMemberMetadata[members.Count]; _objectNameToOrdinal = new Dictionary <string, int>(members.Count); _cLayerNameToOrdinal = new Dictionary <string, int>(members.Count); ReadOnlyMetadataCollection <EdmMember> keyMembers = null; if (Helper.IsEntityType(edmType)) { keyMembers = ((EntityType)edmType).KeyMembers; } for (var i = 0; i < _members.Length; ++i) { var member = members[i]; ObjectPropertyMapping memberMap = null; if (null != mapping) { memberMap = mapping.GetPropertyMap(member.Name); if (null != memberMap) { _objectNameToOrdinal.Add(memberMap.ClrProperty.Name, i); // olayer name } } _cLayerNameToOrdinal.Add(member.Name, i); // clayer name // Determine whether this member is part of the identity of the entity. _members[i] = new StateManagerMemberMetadata(memberMap, member, ((null != keyMembers) && keyMembers.Contains(member))); } }
internal StateManagerTypeMetadata(EdmType edmType, ObjectTypeMapping mapping) { DebugCheck.NotNull(edmType); Debug.Assert( Helper.IsEntityType(edmType) || Helper.IsComplexType(edmType), "not Complex or EntityType"); Debug.Assert( ReferenceEquals(mapping, null) || ReferenceEquals(mapping.EdmType, edmType), "different EdmType instance"); _typeUsage = TypeUsage.Create(edmType); _recordInfo = new DataRecordInfo(_typeUsage); var members = TypeHelpers.GetProperties(edmType); _members = new StateManagerMemberMetadata[members.Count]; _objectNameToOrdinal = new Dictionary<string, int>(members.Count); _cLayerNameToOrdinal = new Dictionary<string, int>(members.Count); ReadOnlyMetadataCollection<EdmMember> keyMembers = null; if (Helper.IsEntityType(edmType)) { keyMembers = ((EntityType)edmType).KeyMembers; } for (var i = 0; i < _members.Length; ++i) { var member = members[i]; ObjectPropertyMapping memberMap = null; if (null != mapping) { memberMap = mapping.GetPropertyMap(member.Name); if (null != memberMap) { _objectNameToOrdinal.Add(memberMap.ClrProperty.Name, i); // olayer name } } _cLayerNameToOrdinal.Add(member.Name, i); // clayer name // Determine whether this member is part of the identity of the entity. _members[i] = new StateManagerMemberMetadata(memberMap, member, ((null != keyMembers) && keyMembers.Contains(member))); } }