示例#1
0
            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));
        }
示例#3
0
            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)));
            }
        }
            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));
            }
            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));
            }