private static void SaveGroups(EditAttribute editAttribute, int attributeID) { var curList = AttributeGroups.GetByAttributeID(attributeID); foreach (var groupID in editAttribute.Groups) { if (!curList.Any(item => item.GroupID == groupID)) { var attributeGroup = new AttributeGroup(); attributeGroup.AttributeID = attributeID; attributeGroup.GroupID = groupID; AttributeGroups.Insert(attributeGroup); } else { curList.Remove(curList.Single(cls => cls.GroupID == groupID)); } } foreach (var item in curList) { AttributeGroups.Delete(item.ID); } }
public CompositeEntitySchema(EntitySchema schema, IEnumerable <EntitySchema> ancestorSchemas, bool copyRelationProxiesFromSchema = false) : base(schema.Alias, schema.Name) { //TODO: Need to move this into a mapper, but not currently one available at the right level Id = schema.Id; SchemaType = SchemaType; AttributeGroups.AddRange(schema.AttributeGroups); AttributeDefinitions.AddRange(schema.AttributeDefinitions); UtcCreated = schema.UtcCreated; UtcModified = schema.UtcModified; UtcStatusChanged = schema.UtcStatusChanged; var inheritedDefsDict = new Dictionary <string, InheritedAttributeDefinition>(); var inheritedDefs = ancestorSchemas .SelectMany(entitySchema => entitySchema.AttributeDefinitions.Select(definition => new InheritedAttributeDefinition(definition, entitySchema))).ToArray(); foreach (var def in inheritedDefs) { if (!inheritedDefsDict.ContainsKey(def.Alias)) { inheritedDefsDict.Add(def.Alias, def); } } InheritedAttributeDefinitions = new EntityCollection <InheritedAttributeDefinition>(inheritedDefsDict.Values); // Need to only show the inherited groups that are exposed by the filtered inherited attribute definitions, but also include empty // groups so that they have a chance to have some definitions added var allLinkedGroups = ancestorSchemas.SelectMany(x => x.AttributeDefinitions.Select(y => new InheritedAttributeGroup(y.AttributeGroup, x))); var allKnownGroups = ancestorSchemas.SelectMany(x => x.AttributeGroups.Select(y => new InheritedAttributeGroup(y, x))); var unlinkedGroups = allKnownGroups.Except(allLinkedGroups); var inheritedGroups = InheritedAttributeDefinitions.Select(x => new InheritedAttributeGroup(x.AttributeGroup, x.Schema)).Union (unlinkedGroups); InheritedAttributeGroups = new EntityCollection <InheritedAttributeGroup>(inheritedGroups); RelationProxies.LazyLoadDelegate = schema.RelationProxies.LazyLoadDelegate; XmlConfiguration = schema.XmlConfiguration; if (copyRelationProxiesFromSchema) { foreach (var proxies in schema.RelationProxies.GetManualParentProxies()) { RelationProxies.EnlistParent(proxies.Item.Source, proxies.Item.Type, proxies.Item.Ordinal, proxies.Item.MetaData.ToArray()); } foreach (var proxies in schema.RelationProxies.GetManualChildProxies()) { RelationProxies.EnlistParent(proxies.Item.Source, proxies.Item.Type, proxies.Item.Ordinal, proxies.Item.MetaData.ToArray()); } } }
public ActionResult Edit(int?id) { EditAttribute editAttribute; if (id.HasValue) { editAttribute = Mapper.Map <EditAttribute>(Attributes.GetByID(id.Value)); editAttribute.Groups = AttributeGroups.GetByAttributeID(editAttribute.ID).Select(item => item.GroupID).ToList(); } else { editAttribute = new EditAttribute(); } return(View(editAttribute)); }
public ActionResult Edit(EditAttribute editAttribute) { try { var attribute = Mapper.Map <Attribute>(editAttribute); attribute.LastUpdate = DateTime.Now; ViewBag.Success = true; int attributeID = attribute.ID; if (attributeID == -1) { Attributes.Insert(attribute); attributeID = attribute.ID; SaveGroups(editAttribute, attribute.ID); SaveOptions(editAttribute, attribute.ID); UserNotifications.Send(UserID, String.Format("جدید - ویژگی '{0}'", attribute.Title), "/Admin/Attributes/Edit/" + attribute.ID, NotificationType.Success); editAttribute = new EditAttribute(); } else { Attributes.Update(attribute); SaveGroups(editAttribute, attribute.ID); SaveOptions(editAttribute, attribute.ID); editAttribute.Groups = AttributeGroups.GetByAttributeID(editAttribute.ID).Select(item => item.GroupID).ToList(); editAttribute.Options = AttributeOptions.GetByAttributeID(editAttribute.ID).Select(item => new EditAttributeOption() { ID = item.ID, AttributeID = item.AttributeID, Title = item.Title }).ToList(); } } catch (Exception ex) { SetErrors(ex); } return(ClearView(editAttribute)); }
protected override void Visit(XmlSchemaAttributeGroup group) { AttributeGroups.Add(group); }