Glass.Mapper.Sc.DataMappers.SitecoreLinkedMapper.MapToProperty C# (CSharp) Метод

MapToProperty() публичный Метод

Maps data from the CMS value to the .Net property value
public MapToProperty ( AbstractDataMappingContext mappingContext ) : object
mappingContext AbstractDataMappingContext The mapping context.
Результат object
        public override object MapToProperty(AbstractDataMappingContext mappingContext)
        {
            var scConfig = Configuration as SitecoreLinkedConfiguration;
            var scContext = mappingContext as SitecoreDataMappingContext;

            Type genericType = Mapper.Utilities.GetGenericArgument(scConfig.PropertyInfo.PropertyType);

            var item = scContext.Item;

            var linkDb = global::Sitecore.Globals.LinkDatabase;

            //ME - i am not sure this is correct but there is an odd behaviour of references
            // languges come back as invariant, going with default language in this scenario
            var references = new Func<IEnumerable<Item>>(() =>{
                        var itemLinks = linkDb.GetReferences(item);
                        var items = itemLinks.Select(x => x.GetTargetItem());
                        return Utilities.GetLanguageItems(items, LanguageManager.DefaultLanguage, scContext.Service.ItemVersionHandler);
                });

            var getItems = new Func<IEnumerable<Item>>(() =>
            {


                switch (scConfig.Option)
                {
                    case SitecoreLinkedOptions.All:
                        var itemLinks1 = references();
                        var itemLinks2 = linkDb.GetReferrers(item);
                        return itemLinks1.Union(itemLinks2.Select(x => x.GetSourceItem()));
                    case SitecoreLinkedOptions.References:
                        return references();
                    case SitecoreLinkedOptions.Referrers:
                        var itemLinks4 = linkDb.GetReferrers(item);
                        return itemLinks4.Select(x => x.GetSourceItem());
                    default:
                        return new List<Item>();
                }
            });

            return scContext.Service.CreateTypes(genericType, getItems, scConfig.IsLazy, scConfig.InferType);
        }

Usage Example

        public void MapToProperty_GetAllReferences_ReferrersListReturned()
        {
            //Act
            var item = Database.GetItem("/sitecore/content/Tests/DataMappers/SitecoreLinkedMapper/Target");
           
            //ME - when getting templates you have to disable the role manager
            using (new SecurityDisabler())
            {
                var template = Database.GetItem("/sitecore/templates/Tests/DataMappers/DataMappersSingleField");
         
            var config = new SitecoreLinkedConfiguration();
                config.PropertyInfo = typeof (StubClass).GetProperty("StubMappeds");
            config.Option = SitecoreLinkedOptions.References;

            var context = Context.Create(Utilities.CreateStandardResolver());
            context.Load(new SitecoreAttributeConfigurationLoader("Glass.Mapper.Sc.Integration"));

            var mapper = new SitecoreLinkedMapper();
            mapper.Setup(new DataMapperResolverArgs(context, config));

            var service = new SitecoreService(Database, context);

            //Act
            var result =
                mapper.MapToProperty(new SitecoreDataMappingContext(null, item, service)) as IEnumerable<StubMapped>;

            //Assert
            Assert.AreEqual(1, result.Count());
            Assert.AreEqual(template.ID.Guid, result.First().Id);
            }
        }
All Usage Examples Of Glass.Mapper.Sc.DataMappers.SitecoreLinkedMapper::MapToProperty