Пример #1
0
        public MetadataAttributeUsage AddMetadataAtributeUsage(MetadataPackage package, MetadataAttribute attribute, string label, string description, int minCardinality, int maxCardinality)
        {
            Contract.Requires(package != null && package.Id >= 0);
            Contract.Requires(attribute != null && attribute.Id >= 0);

            Contract.Ensures(Contract.Result<MetadataAttributeUsage>() != null && Contract.Result<MetadataAttributeUsage>().Id >= 0);

            MetadataPackageRepo.Reload(package);
            MetadataPackageRepo.LoadIfNot(package.MetadataAttributeUsages);
            int count = 0;
            try
            {
                count = (from v in package.MetadataAttributeUsages
                 where v.MetadataAttribute.Id.Equals(attribute.Id)
                 select v
                         )
                         .Count();
            }
            catch { }

            MetadataAttributeUsage usage = new MetadataAttributeUsage()
            {
                MetadataPackage = package,
                MetadataAttribute = attribute,
                // if there is no label provided, use the attribute name and a sequence number calculated by the number of occurrences of that attribute in the current structure
                Label = !string.IsNullOrWhiteSpace(label) ? label : (count <= 0 ? attribute.Name : string.Format("{0} ({1})", attribute.Name, count)),
                Description = description,
                MinCardinality = minCardinality,
                MaxCardinality = maxCardinality,
            };
            package.MetadataAttributeUsages.Add(usage);
            attribute.UsedIn.Add(usage);

            using (IUnitOfWork uow = this.GetUnitOfWork())
            {
                IRepository<MetadataAttributeUsage> repo = uow.GetRepository<MetadataAttributeUsage>();
                repo.Put(usage);
                uow.Commit();
            }
            return (usage);
        }
Пример #2
0
        public void RemoveMetadataAtributeUsage(MetadataAttributeUsage usage)
        {
            Contract.Requires(usage != null && usage.Id >= 0);

            using (IUnitOfWork uow = this.GetUnitOfWork())
            {
                IRepository<MetadataAttributeUsage> repo = uow.GetRepository<MetadataAttributeUsage>();
                repo.Delete(usage);
                uow.Commit();
            }
        }