internal static EdmFunction FindFunctionImport(
            MetadataWorkspace workspace,
            string containerName,
            string functionImportName)
        {
            EntityContainer entityContainer;

            if (!workspace.TryGetEntityContainer(containerName, DataSpace.CSpace, out entityContainer))
            {
                throw new InvalidOperationException(Strings.EntityClient_UnableToFindFunctionImportContainer((object)containerName));
            }
            EdmFunction edmFunction = (EdmFunction)null;

            foreach (EdmFunction functionImport in entityContainer.FunctionImports)
            {
                if (functionImport.Name == functionImportName)
                {
                    edmFunction = functionImport;
                    break;
                }
            }
            if (edmFunction == null)
            {
                throw new InvalidOperationException(Strings.EntityClient_UnableToFindFunctionImport((object)containerName, (object)functionImportName));
            }
            if (edmFunction.IsComposableAttribute)
            {
                throw new InvalidOperationException(Strings.EntityClient_FunctionImportMustBeNonComposable((object)(containerName + "." + functionImportName)));
            }
            return(edmFunction);
        }
예제 #2
0
        // requires: all arguments must be given
        internal static EdmFunction FindFunctionImport(MetadataWorkspace workspace, string containerName, string functionImportName)
        {
            Debug.Assert(null != workspace && null != containerName && null != functionImportName);
            // find entity container
            EntityContainer entityContainer;

            if (!workspace.TryGetEntityContainer(containerName, DataSpace.CSpace, out entityContainer))
            {
                throw EntityUtil.InvalidOperation(System.Data.Entity.Strings.EntityClient_UnableToFindFunctionImportContainer(
                                                      containerName));
            }

            // find function import
            EdmFunction functionImport = null;

            foreach (EdmFunction candidate in entityContainer.FunctionImports)
            {
                if (candidate.Name == functionImportName)
                {
                    functionImport = candidate;
                    break;
                }
            }
            if (null == functionImport)
            {
                throw EntityUtil.InvalidOperation(System.Data.Entity.Strings.EntityClient_UnableToFindFunctionImport(
                                                      containerName, functionImportName));
            }
            if (functionImport.IsComposableAttribute)
            {
                throw EntityUtil.InvalidOperation(System.Data.Entity.Strings.EntityClient_FunctionImportMustBeNonComposable(containerName + "." + functionImportName));
            }
            return(functionImport);
        }
예제 #3
0
        internal void SetDefaultContainer(string defaultContainerName)
        {
            EntityContainer container = null;

            if (!String.IsNullOrEmpty(defaultContainerName))
            {
                if (!MetadataWorkspace.TryGetEntityContainer(defaultContainerName, DataSpace.CSpace, out container))
                {
                    throw EntityUtil.InvalidDefaultContainerName("defaultContainerName", defaultContainerName);
                }
            }
            _defaultContainer = container;
        }
        internal void SetDefaultContainer(string defaultContainerName)
        {
            EntityContainer container = null;

            if (!String.IsNullOrEmpty(defaultContainerName))
            {
                if (!MetadataWorkspace.TryGetEntityContainer(defaultContainerName, DataSpace.CSpace, out container))
                {
                    throw new ArgumentException(
                              Strings.ObjectContext_InvalidDefaultContainerName(defaultContainerName), "defaultContainerName");
                }
            }
            _defaultContainer = container;
        }
예제 #5
0
        protected override EntitySetBase VisitEntitySet(EntitySetBase entitySet)
        {
            EntityContainer container;

            if (_metadata.TryGetEntityContainer(entitySet.EntityContainer.Name, entitySet.EntityContainer.DataSpace, out container))
            {
                EntitySetBase extent = null;
                if (container.BaseEntitySets.TryGetValue(entitySet.Name, false, out extent) &&
                    extent != null &&
                    entitySet.BuiltInTypeKind == extent.BuiltInTypeKind) // EntitySet -> EntitySet, AssociationSet -> AssociationSet, etc
                {
                    return(extent);
                }

                throw EntityUtil.Argument(System.Data.Entity.Strings.Cqt_Copier_EntitySetNotFound(entitySet.EntityContainer.Name, entitySet.Name));
            }

            throw EntityUtil.Argument(System.Data.Entity.Strings.Cqt_Copier_EntityContainerNotFound(entitySet.EntityContainer.Name));
        }
예제 #6
0
        internal static EdmFunction FindFunctionImport(MetadataWorkspace workspace, string containerName, string functionImportName)
        {
            DebugCheck.NotNull(workspace);
            DebugCheck.NotNull(containerName);
            DebugCheck.NotNull(functionImportName);

            // find entity container
            EntityContainer entityContainer;

            if (!workspace.TryGetEntityContainer(containerName, DataSpace.CSpace, out entityContainer))
            {
                throw new InvalidOperationException(
                          Strings.EntityClient_UnableToFindFunctionImportContainer(
                              containerName));
            }

            // find function import
            EdmFunction functionImport = null;

            foreach (var candidate in entityContainer.FunctionImports)
            {
                if (candidate.Name == functionImportName)
                {
                    functionImport = candidate;
                    break;
                }
            }
            if (null == functionImport)
            {
                throw new InvalidOperationException(
                          Strings.EntityClient_UnableToFindFunctionImport(
                              containerName, functionImportName));
            }
            if (functionImport.IsComposableAttribute)
            {
                throw new InvalidOperationException(
                          Strings.EntityClient_FunctionImportMustBeNonComposable(containerName + "." + functionImportName));
            }
            return(functionImport);
        }
예제 #7
0
        // requires: all arguments must be given
        internal static EdmFunction FindFunctionImport(MetadataWorkspace workspace, string containerName, string functionImportName)
        {
            Debug.Assert(null != workspace && null != containerName && null != functionImportName);
            // find entity container
            EntityContainer entityContainer;
            if (!workspace.TryGetEntityContainer(containerName, DataSpace.CSpace, out entityContainer))
            {
                throw EntityUtil.InvalidOperation(System.Data.Entity.Strings.EntityClient_UnableToFindFunctionImportContainer(
                    containerName));
            }

            // find function import
            EdmFunction functionImport = null;
            foreach (EdmFunction candidate in entityContainer.FunctionImports)
            {
                if (candidate.Name == functionImportName)
                {
                    functionImport = candidate;
                    break;
                }
            }
            if (null == functionImport)
            {
                throw EntityUtil.InvalidOperation(System.Data.Entity.Strings.EntityClient_UnableToFindFunctionImport(
                    containerName, functionImportName));
            }
            if (functionImport.IsComposableAttribute)
            {
                throw EntityUtil.InvalidOperation(System.Data.Entity.Strings.EntityClient_FunctionImportMustBeNonComposable(containerName + "." + functionImportName));
            }
            return functionImport;
        }
예제 #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        public DbMapping(DbContext context)
        {
            _context         = context;
            _contextTypeName = context.GetType().FullName;

            var objectContext = ((IObjectContextAdapter)context).ObjectContext;
            MetadataWorkspace metadataWorkspace = objectContext.MetadataWorkspace;

            MapperBase mapper;

            EntityContainer entityContainer;

            if (metadataWorkspace.TryGetEntityContainer("CodeFirstDatabase", true, DataSpace.SSpace, out entityContainer))
            {
                mapper = new CodeFirstMapper(metadataWorkspace, entityContainer);
            }
            else
            {
                ReadOnlyCollection <EntityContainer> readOnlyCollection;
#if EF6
                readOnlyCollection = metadataWorkspace.GetItems <EntityContainer>(DataSpace.SSpace);
#else
                readOnlyCollection = metadataWorkspace.GetItems <EntityContainer>(DataSpace.CSpace);
#endif
                entityContainer = readOnlyCollection[0];
                mapper          = new DbFirstMapper(metadataWorkspace, entityContainer);
            }

            var typeMappings = mapper.TypeMappings;

            int depth = 0;
            while (true)
            {
                if (depth > 100)
                {
                    throw new Exception("Type mapping has reached unreasonable depth.");
                }

                if (typeMappings.Count == 0)
                {
                    break;
                }

                var nextLevel = new Dictionary <string, EntityType>();

                foreach (var kvp in typeMappings)
                {
                    EntityMap entityMap;
                    try
                    {
                        entityMap = mapper.MapEntity(kvp.Key, kvp.Value);
                    }
                    catch (ParentNotMappedYetException)
                    {
                        nextLevel.Add(kvp.Key, kvp.Value);
                        continue;
                    }

                    if (entityMap == null)
                    {
                        continue;
                    }

                    //tableMapping.DbMapping = this;
                    _tableMappings.Add(kvp.Key, entityMap);
                }

                typeMappings = nextLevel;
                depth++;
            }

            mapper.BindForeignKeys();
        }
예제 #9
0
 // <summary>
 // Get an entity container based upon the strong name of the container
 // If no entity container is found, returns null, else returns the first one//
 // </summary>
 // <param name="name"> name of the entity container </param>
 // <param name="ignoreCase"> true for case-insensitive lookup </param>
 // <param name="entityContainer"> returns the entity container if a match is found </param>
 // <returns> returns true if a match is found, otherwise false </returns>
 internal virtual bool TryGetEntityContainer(string name, bool ignoreCase, out EntityContainer entityContainer)
 {
     return(MetadataWorkspace.TryGetEntityContainer(name, ignoreCase, TargetDataspace, out entityContainer));
 }
        // Verifies the given extent is present in the given workspace.
        private static void VerifyExtent(MetadataWorkspace workspace, EntitySetBase extent)
        {
            // get the container to which the given extent belongs
            EntityContainer actualContainer = extent.EntityContainer;

            // try to retrieve the container in the given workspace
            EntityContainer referenceContainer = null;
            if (null != actualContainer)
            {
                workspace.TryGetEntityContainer(
                    actualContainer.Name, actualContainer.DataSpace, out referenceContainer);
            }
            
            // determine if the given extent lives in a container from the given workspace
            // (the item collections for each container are reference equivalent when they are declared in the
            // same item collection)
            if (null == actualContainer || null == referenceContainer ||
                !Object.ReferenceEquals(actualContainer, referenceContainer)) 
            {
                // 



                throw EntityUtil.Update(System.Data.Entity.Strings.Update_WorkspaceMismatch, null);
            }
        }
예제 #11
0
        // requires: all arguments must be given
        internal static EdmFunction FindFunctionImport(MetadataWorkspace workspace, string containerName, string functionImportName)
        {
            DebugCheck.NotNull(workspace);
            DebugCheck.NotNull(containerName);
            DebugCheck.NotNull(functionImportName);

            // find entity container
            EntityContainer entityContainer;
            if (!workspace.TryGetEntityContainer(containerName, DataSpace.CSpace, out entityContainer))
            {
                throw new InvalidOperationException(
                    Strings.EntityClient_UnableToFindFunctionImportContainer(
                        containerName));
            }

            // find function import
            EdmFunction functionImport = null;
            foreach (var candidate in entityContainer.FunctionImports)
            {
                if (candidate.Name == functionImportName)
                {
                    functionImport = candidate;
                    break;
                }
            }
            if (null == functionImport)
            {
                throw new InvalidOperationException(
                    Strings.EntityClient_UnableToFindFunctionImport(
                        containerName, functionImportName));
            }
            if (functionImport.IsComposableAttribute)
            {
                throw new InvalidOperationException(
                    Strings.EntityClient_FunctionImportMustBeNonComposable(containerName + "." + functionImportName));
            }
            return functionImport;
        }