使用玻璃映射器对后代类型使用流畅映射

时间:2015-11-13 22:25:34

标签: c# sitecore glass-mapper

我有一个我映射的类型(FooterFolder),其属性为SocialMedia我希望使用自己的流畅配置进行映射。

这里是页脚的配置

loader.Add<FooterFolder>()
        .TemplateId("3E1C2A35-C62C-4FCE-B576-787F23E7728D")
        .AutoMap()
        .Fields(config =>
        {
            config.Field(x => x.LogoLink)
               .FieldName("Logo Link");
        })
        .Query(x => x.SocialLinks).IsRelative().InferType().Query("./Social Links/*");

社交媒体

loader.Add<SocialMedia>()
        .TemplateId("1A1D6464-CB5A-433F-B7A9-9D10FA8E4BFE")
        .AutoMap()
        .Field(x => x.LinkLink).FieldName("Link");

如果我将SocialMedia上的字段名称更改为Link,它可以正常工作(可能使用自动映射),但我希望能够控制映射,以防名称与之完全匹配。有没有办法可以做到这一点?

这是我的FooterFolder辩护:

public class FooterFolder : FolderBase
{
    public virtual string Copyright { get; set; }

    public virtual Image Logo { get; set; }

    public virtual Link LogoLink { get; set; }

    public virtual IEnumerable<SocialMedia> SocialLinks { get; set; }
}

SocialMedia

public class SocialMedia : ContentBase
{
    public virtual Image Icon { get; set; }

    public virtual Link LinkLink { get; set; }

    public virtual string Shorthand { get; set; }
}

(我正在命名属性LinkLink只是为了测试映射。通常情况下,它们只对LogoLink之类的内容有所不同,其中Sitecore中有空格定义)

在sitecore中,Social Media有一个名为General Link的{​​{1}}。如果我将Link上的媒体资源名称更改为SocialMedia,则可能会通过自动映射工作得很好。

1 个答案:

答案 0 :(得分:1)

我最终切换到使用SitecoreGlassMap版本的配置,而不是IConfigurationLoader版本,并且它运行正常。