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); } } }
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()); }