使用glass mapper对子代类型使用fluent映射
本文关键字:fluent 映射 类型 glass mapper 使用 | 更新日期: 2023-09-27 18:22:01
我有一个正在映射的类型(FooterFolder
),它具有SocialMedia
的属性,我想使用它自己的fluent配置来映射它。
以下是Footer 的配置
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
有一个名为Link
的General Link
。如果我将SocialMedia
上的属性名称更改为Link
,那么它大概可以通过自动映射正常工作。
我最终切换到使用SitecoreGlassMap
版本的配置,而不是IConfigurationLoader
版本,并且运行良好。