nhibernate+自动映射器以及多对多关系
本文关键字:关系 映射 nhibernate+ | 更新日期: 2023-09-27 18:19:39
public class Technology : EntityBase
{
[NotNullNotEmpty]
[Length(ColumnMetadata.LongTextLength)]
public virtual string Name { get; set; }
public virtual IList<TechnologyTechCategories> TechCategories { get; set; }
}
public class TechnologyTechCategories : EntityBase
{
[NotNull]
public virtual Technology Technology { get; set; }
[NotNull]
public virtual TechCategory TechCategory { get; set; }
}
public class TechCategory : ReferenceBase
{
}
public class TechDetailModel
{
public virtual int Id { get; set; }
[Required]
public virtual string Name { get; set; }
[DisplayName("Tech Categories")]
[Required]
public int[] TechCategories { get; set; }
public virtual IEnumerable<SelectListItem> Categories { get; set; }
}
这些是我上面的课程。因此,在绑定到控制器时,我忽略了多选下拉列表的类别集合。但是我无法让自动映射器将 IList 初始化为 int[] 技术类别。有人可以帮忙解决如何将映射放在一起吗?
Mapper.CreateMap<Technology, TechDetailModel>()
.ForMember(c => c.Categories, option => option.Ignore())
.ReverseMap();
您希望在此处将复杂类型自动映射到简单类型,即 IList => int[]
我假设实体库有一些身份属性,例如 ID
因此,以下映射可能适合您:
Mapper.CreateMap<Technology, TechDetailModel>()
.ForMember(c => c.Categories, option => option.Ignore())
.ForMember(c => c.TechCategories, option => option.MapFrom(src => src.TechnologyTechCategories.Select(p => p.TechCategory.Id)));
鉴于从复杂到简单的映射,您将无法在此处使用反向映射。
为了简化映射(和对象模型(,可能值得考虑更改您拥有的多对多映射。你真的需要那个"加入"类吗?如果您在两个类(技术和技术类别(上都指定了 IList,则 FluentNHibernate 自动映射(假设您正在使用此映射(将为您创建连接表。