Esempio n. 1
0
        internal static void Initialize(Dictionary <Type, List <string> > sets)
        {
            if (_entitySetMappingsCache.Count > 0)
            {
                return;
            }
            lock (_object)
            {
                foreach (var set in sets)
                {
                    if (set.Value.Count > 1)
                    {
                        throw new InvalidOperationException();
                    }

                    var type = set.Key;

                    if (_entitySetMappingsCache.ContainsKey(type))
                    {
                        continue;
                    }

                    EntityType entityType = new EntityType(type.Name, type.NestingNamespace(), null);
                    var        entitySet  = new EntitySet(type.Name, "dbo", type.Name, entityType);

                    var properties = GetProperties(type, false, new Type[] { type }).ToList();
                    for (var i = 0; i < properties.Count; ++i)
                    {
                        var         propertyInfo = properties[i];
                        EdmProperty property     = new EdmProperty();
                        property.PropertyInfo = propertyInfo;
                        property.Name         = propertyInfo.Name;

                        var propertyType = propertyInfo.PropertyType;
                        property.Nullable = propertyType.TryUnwrapNullableType(out propertyType) || !propertyType.IsValueType();

                        PrimitiveTypeKind primitiveTypeKind;
                        if (EdmConstants.TryGetPrimitiveTypeKind(propertyType, out primitiveTypeKind))
                        {
                            property.TypeUsage = TypeUsage.Create(EdmConstants.GetPrimitiveType(primitiveTypeKind));
                        }
                        entitySet.ElementType.AddProperty(property);
                    }

                    var typeToLoad = type;
                    do
                    {
                        typeToLoad = typeToLoad.BaseType();
                    }while (typeToLoad != null && typeToLoad != typeof(Object));

                    if (typeToLoad == null || typeToLoad == typeof(Object))
                    {
                        typeToLoad = type;
                    }

                    _entitySetMappingsCache[type] = new EntitySetTypePair(entitySet, typeToLoad);
                }
            }
        }
Esempio n. 2
0
        private void InitializeUnderlyingTypes(EntitySetTypePair pair)
        {
            _entitySet = pair.EntitySet;
            _baseType  = pair.BaseType;

            _entitySetName = string.Format(
                CultureInfo.InvariantCulture, "{0}.{1}", _entitySet.EntityContainer.Name, _entitySet.Name);
            _quotedEntitySetName = string.Format(
                CultureInfo.InvariantCulture,
                "{0}.{1}",
                QuoteIdentifier(_entitySet.EntityContainer.Name),
                QuoteIdentifier(_entitySet.Name));

            InitializeQuery(CreateObjectQuery());
        }