internal StateManagerTypeMetadata(EdmType edmType, ObjectTypeMapping mapping)
        {
            this._typeUsage  = TypeUsage.Create(edmType);
            this._recordInfo = new DataRecordInfo(this._typeUsage);
            ReadOnlyMetadataCollection <EdmProperty> properties = TypeHelpers.GetProperties(edmType);

            this._members             = new StateManagerMemberMetadata[properties.Count];
            this._objectNameToOrdinal = new Dictionary <string, int>(properties.Count);
            this._cLayerNameToOrdinal = new Dictionary <string, int>(properties.Count);
            ReadOnlyMetadataCollection <EdmMember> metadataCollection = (ReadOnlyMetadataCollection <EdmMember>)null;

            if (Helper.IsEntityType(edmType))
            {
                metadataCollection = ((EntityTypeBase)edmType).KeyMembers;
            }
            for (int index = 0; index < this._members.Length; ++index)
            {
                EdmProperty           memberMetadata = properties[index];
                ObjectPropertyMapping memberMap      = (ObjectPropertyMapping)null;
                if (mapping != null)
                {
                    memberMap = mapping.GetPropertyMap(memberMetadata.Name);
                    if (memberMap != null)
                    {
                        this._objectNameToOrdinal.Add(memberMap.ClrProperty.Name, index);
                    }
                }
                this._cLayerNameToOrdinal.Add(memberMetadata.Name, index);
                this._members[index] = new StateManagerMemberMetadata(memberMap, memberMetadata, metadataCollection != null && metadataCollection.Contains((EdmMember)memberMetadata));
            }
        }
Ejemplo n.º 2
0
 internal StateManagerMemberMetadata(ObjectPropertyMapping memberMap, EdmProperty memberMetadata, bool isPartOfKey)
 {
     DebugCheck.NotNull(memberMap);
     DebugCheck.NotNull(memberMetadata);
     _clrProperty   = memberMap.ClrProperty;
     _edmProperty   = memberMetadata;
     _isPartOfKey   = isPartOfKey;
     _isComplexType = (Helper.IsEntityType(_edmProperty.TypeUsage.EdmType) ||
                       Helper.IsComplexType(_edmProperty.TypeUsage.EdmType));
 }
Ejemplo n.º 3
0
 internal StateManagerMemberMetadata(
     ObjectPropertyMapping memberMap,
     EdmProperty memberMetadata,
     bool isPartOfKey)
 {
     this._clrProperty   = memberMap.ClrProperty;
     this._edmProperty   = memberMetadata;
     this._isPartOfKey   = isPartOfKey;
     this._isComplexType = Helper.IsEntityType(this._edmProperty.TypeUsage.EdmType) || Helper.IsComplexType(this._edmProperty.TypeUsage.EdmType);
 }
Ejemplo n.º 4
0
 internal StateManagerMemberMetadata(ObjectPropertyMapping memberMap, EdmProperty memberMetadata, bool isPartOfKey)
 {
     // if memberMap is null, then this is a shadowstate
     Debug.Assert(null != memberMap, "shadowstate not supported");
     Debug.Assert(null != memberMetadata, "CSpace should never be null");
     _clrProperty = memberMap.ClrProperty;
     _edmProperty = memberMetadata;
     _isPartOfKey = isPartOfKey;
     _isComplexType = (Helper.IsEntityType(_edmProperty.TypeUsage.EdmType) ||
                      Helper.IsComplexType(_edmProperty.TypeUsage.EdmType));
 }
Ejemplo n.º 5
0
 private static void SetProperty <T>(
     ref T newO,
     ObjectPropertyMapping indexerVal,
     object tempValue,
     CustomMappingFunction customMappingFunction)
 {
     if (customMappingFunction != null)
     {
         var customVal = customMappingFunction.Action.Invoke(tempValue);
         indexerVal.ObjectPropertyInfo.SetValue(newO, customVal);
     }
     else
     {
         if (indexerVal.ObjectType == typeof(Guid))
         {
             indexerVal.ObjectPropertyInfo.SetValue(newO, new Guid(tempValue.ToString()), null);
         }
         else if (indexerVal.ObjectPropertyInfo.PropertyType.IsEnum)
         {
             indexerVal.ObjectPropertyInfo.SetValue(
                 newO,
                 Enum.Parse(indexerVal.ObjectPropertyInfo.PropertyType, tempValue.ToString()),
                 null);
         }
         else if (indexerVal.ObjectType == typeof(bool))
         {
             if (tempValue == "0" || tempValue == "1")
             {
                 indexerVal.ObjectPropertyInfo.SetValue(
                     newO,
                     Convert.ChangeType(int.Parse(tempValue.ToString()), indexerVal.ObjectType),
                     null);
             }
             else
             {
                 indexerVal.ObjectPropertyInfo.SetValue(
                     newO,
                     Convert.ChangeType(tempValue, indexerVal.ObjectType),
                     null);
             }
         }
         else
         {
             indexerVal.ObjectPropertyInfo.SetValue(
                 newO,
                 Convert.ChangeType(tempValue, indexerVal.ObjectType),
                 null);
         }
     }
 }
        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)));
            }
        }
Ejemplo n.º 7
0
        public static void GenerateProperties(Type objectType, ExecutionContext context)
        {
            var timer = new Stopwatch();

            timer.Start();
            try
            {
                if (ObjectMappings.ContainsKey(objectType))
                {
                    return;
                }

                ObjectMappings.TryAdd(objectType, new ConcurrentDictionary <string, ObjectPropertyMapping>());

                // Need to look at attributes on properties for type conversions
                foreach (var pi in objectType.GetProperties())
                {
                    if (pi.PropertyType.IsEnum)
                    {
                        var wimp = new ObjectPropertyMapping
                        {
                            Name               = pi.Name,
                            IsEnum             = true,
                            ObjectType         = pi.PropertyType,
                            ObjectPropertyInfo = pi,
                            IsNullable         = true
                        };
                        ObjectMappings[objectType].TryAdd(pi.Name.ToLower(), wimp);
                    }
                    else if (pi.PropertyType.IsGenericType &&
                             pi.PropertyType.GetGenericTypeDefinition() == typeof(Nullable <>))
                    {
                        var underlyingType = Nullable.GetUnderlyingType(pi.PropertyType);

                        var objectPropertyMapping = new ObjectPropertyMapping
                        {
                            // ReSharper disable once PossibleNullReferenceException
                            Name               = pi.Name,
                            ObjectType         = underlyingType,
                            ObjectPropertyInfo = pi,
                            IsNullable         = true
                        };

                        ObjectMappings[objectType].TryAdd(pi.Name.ToLower(), objectPropertyMapping);
                    }
                    else if (pi.PropertyType.IsValueType ||
                             pi.PropertyType.Name == "String" ||
                             pi.PropertyType.Name == "Byte[]")
                    {
                        var objectPropertyMapping = new ObjectPropertyMapping
                        {
                            Name               = pi.Name,
                            ObjectType         = pi.PropertyType,
                            ObjectPropertyInfo = pi
                        };
                        ObjectMappings[objectType].TryAdd(pi.Name.ToLower(), objectPropertyMapping);
                    }
                }
            }
            finally
            {
                timer.Stop();
                context.ExecutionEvent.GeneratePropertiesTiming = timer.ElapsedTicks;
            }
        }