Ejemplo n.º 1
0
        private static EntityMap CreateEntityMap <TEntity>(ObjectQuery query)
        {
            Type          entityType    = typeof(TEntity);
            ObjectContext objectContext = query.Context;

            var modelSet = objectContext.GetEntitySet <TEntity>();

            if (modelSet == null)
            {
                return(null);
            }

            var entityMap = new EntityMap(entityType);

            entityMap.ModelSet  = modelSet;
            entityMap.ModelType = entityMap.ModelSet.ElementType;

            var metadata = objectContext.MetadataWorkspace;

            // force metadata to load
            dynamic dbProxy = new DynamicProxy(objectContext);

            dbProxy.EnsureMetadata();

            ItemCollection itemCollection;

            if (!metadata.TryGetItemCollection(DataSpace.CSSpace, out itemCollection))
            {
                // force CSSpace to load
                query.ToTraceString();

                // try again
                metadata.TryGetItemCollection(DataSpace.CSSpace, out itemCollection);
            }

            if (itemCollection == null)
            {
                return(null);
            }

            dynamic mappingFragmentProxy = FindMappingFragment(itemCollection, entityMap.ModelSet);

            if (mappingFragmentProxy == null)
            {
                return(null);
            }

            // SModel
            entityMap.StoreSet  = mappingFragmentProxy.TableSet;
            entityMap.StoreType = entityMap.StoreSet.ElementType;

            SetProperties(entityMap, mappingFragmentProxy);
            SetKeys(entityMap);
            SetTableName(entityMap);

            return(entityMap);
        }