Example #1
0
        /// <summary>
        /// Builds <see cref="DataObjectEdmModel" /> instance using specified assemblies.
        /// </summary>
        /// <returns>An <see cref="DataObjectEdmModel" /> instance.</returns>
        public DataObjectEdmModel Build()
        {
            var meta = new DataObjectEdmMetadata
            {
                KeyPropertyName = _keyProperty.Name,
                KeyProperty     = _keyProperty
            };

            var typeFilter = TypeFilter ?? (t => true);

            foreach (Assembly assembly in _searchAssemblies)
            {
                IEnumerable <Type> dataObjectTypes = assembly
                                                     .GetTypes()
                                                     .Where(t => t.IsSubclassOf(typeof(DataObject)))
                                                     .Where(typeFilter);

                foreach (Type dataObjectType in dataObjectTypes)
                {
                    if (!meta.Contains(dataObjectType))
                    {
                        AddDataObjectWithHierarchy(meta, dataObjectType);
                    }
                }
            }

            if (meta[typeof(DataObject)].KeyType == null)
            {
                var key = meta[typeof(DataObject)].OwnProperties.FirstOrDefault(p => p.Name == _keyProperty.Name);
                Contract.Assume(key != null);
                meta[typeof(DataObject)].OwnProperties.Clear();
                foreach (var type in meta.Types)
                {
                    if (type.BaseType == typeof(DataObject) && meta[type].KeyType == null)
                    {
                        meta[type].OwnProperties.Add(key);
                        meta[type].KeyType = typeof(Guid);
                    }
                }
            }

            return(new DataObjectEdmModel(meta, this));
        }
        public DataObjectEdmModel(DataObjectEdmMetadata metadata, IDataObjectEdmModelBuilder edmModelBuilder = null)
        {
            Contract.Requires <ArgumentNullException>(metadata != null);
            EdmModelBuilder = edmModelBuilder;
            var container = UnityFactory.GetContainer();

            if (container != null)
            {
                if (container.IsRegistered <IExportService>("Export"))
                {
                    ExportService = container.Resolve <IExportService>("Export");
                }

                if (container.IsRegistered <IExportService>())
                {
                    ExportService = container.Resolve <IExportService>();
                }

                if (container.IsRegistered <IODataExportService>("Export"))
                {
                    ODataExportService = container.Resolve <IODataExportService>("Export");
                }

                if (container.IsRegistered <IODataExportService>())
                {
                    ODataExportService = container.Resolve <IODataExportService>();
                }
            }

            _metadata = metadata;

            BuildTypeHierarchy();
            BuildEdmEntityTypes();
            BuildEntitySets();
            RegisterMasters();
            RegisterDetails();
            RegisterGeoIntersectsFunction();
            RegisterGeomIntersectsFunction();
        }
Example #3
0
        /// <summary>
        /// Adds the data object for exposing with its whole hierarchy.
        /// </summary>
        /// <param name="meta">The metadata object.</param>
        /// <param name="dataObjectType">The type of the data object.</param>
        private void AddDataObjectWithHierarchy(DataObjectEdmMetadata meta, Type dataObjectType)
        {
            // Some base class can be already added.
            if (meta.Contains(dataObjectType))
            {
                return;
            }

            if (dataObjectType == typeof(DataObject))
            {
                var dataObjectTypeSettings = meta[dataObjectType] = new DataObjectEdmTypeSettings()
                {
                    KeyType = typeof(Guid), EnableCollection = true, CollectionName = EntitySetNameBuilder(dataObjectType)
                };                                                                                                                                                                                              // TODO
                AddProperty(dataObjectTypeSettings, typeof(DataObject).GetProperty(_keyProperty.Name));
                return;
            }

            Type baseType = dataObjectType.BaseType;

            Contract.Assume(baseType != null);

            AddDataObjectWithHierarchy(meta, baseType);

            var typeSettings = meta[dataObjectType] = new DataObjectEdmTypeSettings
            {
                EnableCollection = true,
                CollectionName   = EntitySetNameBuilder(dataObjectType),
                DefaultView      = DynamicView.Create(dataObjectType, null).View
            };

            AddProperties(dataObjectType, typeSettings);
            if (typeSettings.KeyType != null)
            {
                meta[baseType].KeyType = null;
            }
        }