Esempio n. 1
0
 protected override Result DoWork(Models.Entity entity, TypeBuilder typeBuilder)
 {
     return(new Result()
     {
         Properties = CreateProperties(entity.Attributes, typeBuilder)
     });
 }
Esempio n. 2
0
        protected override Result DoWork(Models.Entity entity, TypeBuilder typeBuilder)
        {
            foreach (var listener in entity.Listeners)
            {
                var listenerType = Type.GetType(listener.FullyQualifiedTypeName);
                EventDispatcher.RegisterEntityChangedListener(typeBuilder, listenerType);
            }

            return(new Result());
        }
Esempio n. 3
0
        protected override Result DoWork(Models.Entity entity, TypeBuilder typeBuilder)
        {
            var navWorkshopResult = Factory.GetEntityWorkshop <NavigationPropertyWorkshop>().GetResults(entity);

            foreach (var proxy in entity.Proxies)
            {
                CreateBindedNavigations(typeBuilder, proxy, navWorkshopResult);
            }

            return(new Result());
        }
Esempio n. 4
0
        /// <summary>
        /// Exposes a TypeBuilder
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="name"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        private TypeBuilder CreateDynamicTypeBuilder <T>(Models.Entity entity)
            where T : BaseEntity
        {
            TypeBuilder typeBuilder = _moduleBuilder.DefineType(_moduleBuilder.ScopeName + "." + entity.Name,
                                                                TypeAttributes.Public
                                                                | TypeAttributes.Class
                                                                | TypeAttributes.AutoClass
                                                                | TypeAttributes.AnsiClass
                                                                | TypeAttributes.Serializable
                                                                | TypeAttributes.BeforeFieldInit, typeof(T));

            return(typeBuilder);
        }
Esempio n. 5
0
        protected override Result DoWork(Models.Entity entity, TypeBuilder typeBuilder)
        {
            IEnumerable <Type> knowEntities = Factory.JobBags.Select(jb => jb.Type);

            var manyToOneResult = entity.ManyToOneRelationships.Select(r => CreateManyToOneProperty(r, typeBuilder, knowEntities));
            var oneToManyResult = entity.OneToManyRelationships.Select(r => CreateOneToManyProperty(r, typeBuilder, knowEntities));

            return(new Result
            {
                ManyToOne = manyToOneResult.ToDictionary(r => r.Key, r => r.Value),
                OneToMany = oneToManyResult.ToDictionary(r => r.Key, r => r.Value),
            });
        }
Esempio n. 6
0
        protected override Result DoWork(Models.Entity entity, TypeBuilder typeBuilder)
        {
            AddDataContractAttribute(typeBuilder);
            AddTableAttribute(entity.Name, typeBuilder);

            Type[] proxies = entity.Proxies.Select(i => Type.GetType(i.FullyQualifiedTypeName)).ToArray();

            foreach (var proxy in proxies)
            {
                typeBuilder.AddInterfaceImplementation(proxy);
            }

            return(new Result()
            {
                Proxies = proxies
            });
        }
Esempio n. 7
0
        public MetadataInitializer()
        {
            #region AttributeType

            Models.AttributeType stringType = null;
            Models.AttributeType boolType   = null;
            Models.AttributeType intType    = null;

            attributesTypes.Add(stringType = new Models.AttributeType()
            {
                ClrName       = "System.String",
                SqlServerName = "nvarchar"
            });

            attributesTypes.Add(boolType = new Models.AttributeType()
            {
                ClrName       = "System.Boolean",
                SqlServerName = "bit"
            });

            attributesTypes.Add(intType = new Models.AttributeType()
            {
                ClrName       = "System.Int32",
                SqlServerName = "int"
            });

            attributesTypes.Add(new Models.AttributeType()
            {
                ClrName       = "System.Decimal",
                SqlServerName = "real"
            });

            attributesTypes.Add(new Models.AttributeType()
            {
                ClrName       = "System.DateTime",
                SqlServerName = "datetime"
            });

            #endregion

            #region Description of Metadata entities

            // Entity

            Models.Entity entityEntity        = null;
            Models.Entity attributeTypeEntity = null;
            Models.Entity attributeEntity     = null;
            Models.Entity proxyEntity         = null;
            Models.Entity listenerEntity      = null;

            entities.Add(entityEntity = new Models.Entity()
            {
                Name        = "Entity",
                Description = "Describe an entity",
                Managed     = true,
                Metadata    = true,
                Attributes  =
                {
                    new Models.Attribute()
                    {
                        Name       = "Name",
                        IsNullable = false,
                        Type       = stringType,
                        Managed    = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "Description",
                        IsNullable = true,
                        Type       = stringType,
                        Managed    = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "Managed",
                        IsNullable = false,
                        Type       = boolType,
                        Managed    = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "Metadata",
                        IsNullable = false,
                        Type       = boolType,
                        Managed    = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "Association",
                        IsNullable = false,
                        Type       = boolType,
                        Managed    = true,
                    },
                }
            });

            // Attribute

            entities.Add(attributeEntity = new Models.Entity()
            {
                Name        = "Attribute",
                Description = "Describe an entity attribute",
                Managed     = true,
                Metadata    = true,
                Attributes  =
                {
                    new Models.Attribute()
                    {
                        Name       = "Name",
                        IsNullable = false,
                        Type       = stringType,
                        Managed    = true,
                        Metadata   = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "IsNullable",
                        IsNullable = false,
                        Type       = boolType,
                        Managed    = true,
                        Metadata   = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "DefaultValue",
                        IsNullable = true,
                        Type       = stringType,
                        Managed    = true,
                        Metadata   = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "Length",
                        IsNullable = true,
                        Type       = intType,
                        Managed    = true,
                        Metadata   = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "Managed",
                        IsNullable = false,
                        Type       = boolType,
                        Managed    = true,
                        Metadata   = true,
                    },
                }
            });

            attributeEntity.ManyToOneRelationships.Add(new Models.Relationship()
            {
                Name = "Attributes",
                One  = entityEntity,
                OneNavigationName = "Entity",
                Many = attributeEntity,
                ManyNavigationName = "Attributes"
            });

            // AttributeType

            entities.Add(attributeTypeEntity = new Models.Entity()
            {
                Name        = "AttributeType",
                Description = "Describe an attribute type",
                Attributes  =
                {
                    new Models.Attribute()
                    {
                        Name       = "ClrName",
                        IsNullable = true,
                        Type       = stringType,
                        Managed    = true,
                        Metadata   = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "SqlServerName",
                        IsNullable = true,
                        Type       = stringType,
                        Managed    = true,
                        Metadata   = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "DefaultLength",
                        IsNullable = true,
                        Type       = intType,
                        Managed    = true,
                        Metadata   = true,
                    },
                }
            });

            attributeTypeEntity.OneToManyRelationships.Add(new Models.Relationship()
            {
                Name = "Attributes",
                One  = attributeTypeEntity,
                OneNavigationName = "Type",
                Many = attributeEntity,
                ManyNavigationName = "Attributes"
            });

            // Proxy

            entities.Add(proxyEntity = new Models.Entity()
            {
                Name        = "Proxy",
                Description = "Describe a proxy",
                Attributes  =
                {
                    new Models.Attribute()
                    {
                        Name       = "FullyQualifiedTypeName",
                        IsNullable = true,
                        Type       = stringType,
                        Managed    = true,
                        Metadata   = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "Managed",
                        IsNullable = false,
                        Type       = boolType,
                        Managed    = true,
                        Metadata   = true,
                    },
                }
            });

            proxyEntity.ManyToOneRelationships.Add(new Models.Relationship()
            {
                Name = "Entity",
                One  = entityEntity,
                OneNavigationName = "Entity",
                Many = proxyEntity,
                ManyNavigationName = "Proxies"
            });

            // Listener

            entities.Add(listenerEntity = new Models.Entity()
            {
                Name        = "Listener",
                Description = "Describe a listener",
                Managed     = true,
                Metadata    = true,
                Attributes  =
                {
                    new Models.Attribute()
                    {
                        Name       = "FullyQualifiedTypeName",
                        IsNullable = true,
                        Type       = stringType,
                        Managed    = true,
                        Metadata   = true,
                    },
                    new Models.Attribute()
                    {
                        Name       = "Managed",
                        IsNullable = false,
                        Type       = boolType,
                        Managed    = true,
                        Metadata   = true,
                    },
                }
            });

            listenerEntity.ManyToOneRelationships.Add(new Models.Relationship()
            {
                Name = "ListenersToEntity",
                One  = entityEntity,
                OneNavigationName = "Entity",
                Many = listenerEntity,
                ManyNavigationName = "Listeners"
            });

            #endregion

            #region Proxies

            proxies.Add(new Models.Proxy()
            {
                Entity  = attributeTypeEntity,
                Managed = true,
                FullyQualifiedTypeName = typeof(Kelpie.Proxy.Metadata.IAttributeType).AssemblyQualifiedName
            });

            proxies.Add(new Models.Proxy()
            {
                Entity  = attributeEntity,
                Managed = true,
                FullyQualifiedTypeName = typeof(Kelpie.Proxy.Metadata.IAttribute).AssemblyQualifiedName
            });

            proxies.Add(new Models.Proxy()
            {
                Entity  = entityEntity,
                Managed = true,
                FullyQualifiedTypeName = typeof(Kelpie.Proxy.Metadata.IEntity).AssemblyQualifiedName
            });

            proxies.Add(new Models.Proxy()
            {
                Entity  = proxyEntity,
                Managed = true,
                FullyQualifiedTypeName = typeof(Kelpie.Proxy.Metadata.IProxy).AssemblyQualifiedName
            });

            proxies.Add(new Models.Proxy()
            {
                Entity  = listenerEntity,
                Managed = true,
                FullyQualifiedTypeName = typeof(Kelpie.Proxy.Metadata.IListener).AssemblyQualifiedName
            });

            #endregion

            #region Behaviors

            /*businessLogics.Add(new Models.BusinessLogic()
             * {
             *  Entity = entityEntity,
             *  Managed = true,
             *  FullyQualifiedTypeName = typeof(Kelpie.DynamicEntity.Behavior.EntityToSqlStructure).AssemblyQualifiedName,
             * });*/

            #endregion
        }
Esempio n. 8
0
 public TResult GetResults(Models.Entity entity)
 {
     return(resultsByEntityName[entity.Name]);
 }
Esempio n. 9
0
 private void AddResults(Models.Entity entity, TResult result)
 {
     resultsByEntityName.Add(entity.Name, result);
 }
Esempio n. 10
0
 protected abstract TResult DoWork(Models.Entity entity, TypeBuilder typeBuilder);