protected override Result DoWork(Models.Entity entity, TypeBuilder typeBuilder) { return(new Result() { Properties = CreateProperties(entity.Attributes, typeBuilder) }); }
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()); }
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()); }
/// <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); }
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), }); }
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 }); }
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 }
public TResult GetResults(Models.Entity entity) { return(resultsByEntityName[entity.Name]); }
private void AddResults(Models.Entity entity, TResult result) { resultsByEntityName.Add(entity.Name, result); }
protected abstract TResult DoWork(Models.Entity entity, TypeBuilder typeBuilder);