Пример #1
0
 public bool TryGetTable(Type entityType, out MetaTable table)
 {
     CheckForRegistrationException();
     if (entityType == null)
     {
         throw new ArgumentNullException("entityType");
     }
     if (!this._registerGlobally)
     {
         table = this.Tables.SingleOrDefault <MetaTable>(t => t.EntityType == entityType);
         return(table > null);
     }
     return(MetaModelManager.TryGetTable(entityType, out table));
 }
Пример #2
0
        private void AddTable(MetaTable table)
        {
            _tables.Add(table);
            _tablesByUniqueName.Add(table.Name, table);
            if (_registerGlobally)
            {
                MetaModelManager.AddTable(table.EntityType, table);
            }

            if (table.DataContextType != null)
            {
                // need to use the name from the provider since the name from the table could have been modified by use of TableNameAttribute
                _tablesByContextAndName.Add(new ContextTypeTableNamePair(table.DataContextType, table.Provider.Name), table);
            }
        }
Пример #3
0
        /// <summary>
        /// Gets the model instance that had the contextType registered with it
        /// </summary>
        /// <param name="contextType">A DataContext or ObjectContext type (e.g. NorthwindDataContext)</param>
        /// <returns>a model</returns>
        public static MetaModel GetModel(Type contextType)
        {
            CheckForRegistrationException();
            if (contextType == null)
            {
                throw new ArgumentNullException("contextType");
            }
            MetaModel model;

            if (MetaModelManager.TryGetModel(contextType, out model))
            {
                return(model);
            }
            else
            {
                throw new InvalidOperationException(String.Format(
                                                        CultureInfo.CurrentCulture,
                                                        DynamicDataResources.MetaModel_ContextDoesNotBelongToModel,
                                                        contextType.FullName));
            }
        }
Пример #4
0
        public virtual void RegisterContext(DataModelProvider dataModelProvider, ContextConfiguration configuration)
        {
            if (dataModelProvider == null)
            {
                throw new ArgumentNullException("dataModelProvider");
            }

            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }

            if (_registerGlobally)
            {
                CheckForRegistrationException();
            }

            // check if context has already been registered
            if (_contextTypes.Contains(dataModelProvider.ContextType))
            {
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, DynamicDataResources.MetaModel_ContextAlreadyRegistered, dataModelProvider.ContextType.FullName));
            }

            try {
                IEnumerable <TableProvider> tableProviders = dataModelProvider.Tables;

                // create and validate model
                var tablesToInitialize = new List <MetaTable>();
                foreach (TableProvider tableProvider in tableProviders)
                {
                    RegisterMetadataTypeDescriptionProvider(tableProvider, configuration.MetadataProviderFactory);

                    MetaTable table = CreateTable(tableProvider);
                    table.CreateColumns();

                    var    tableNameAttribute = tableProvider.Attributes.OfType <TableNameAttribute>().SingleOrDefault();
                    string nameOverride       = tableNameAttribute != null ? tableNameAttribute.Name : null;
                    table.SetScaffoldAndName(configuration.ScaffoldAllTables, nameOverride);

                    CheckTableNameConflict(table, nameOverride, tablesToInitialize);

                    tablesToInitialize.Add(table);
                }

                _contextTypes.Add(dataModelProvider.ContextType);

                if (_registerGlobally)
                {
                    MetaModelManager.AddModel(dataModelProvider.ContextType, this);
                }

                foreach (MetaTable table in tablesToInitialize)
                {
                    AddTable(table);
                }
                // perform initialization at the very end to ensure all references will be properly registered
                foreach (MetaTable table in tablesToInitialize)
                {
                    table.Initialize();
                }
            }
            catch (Exception e) {
                if (_registerGlobally)
                {
                    s_registrationException = e;
                }
                throw;
            }
        }