Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# nhibernate+;Automapper和多对多关系 公共类技术:EntityBase { [不空不空] [长度(ColumnMetadata.LongTextLength)] 公共虚拟字符串名称{get;set;} 公共虚拟IList TechCategories{get;set;} } 公共类技术分类:EntityBase { [非空] 公共虚拟技术技术{get;set;} [非空] 公共虚拟TechCategory TechCategory{get;set;} } 公共类TechCategory:ReferenceBase { } 公共类模型 { 公共虚拟整数Id{get;set;} [必需] 公共虚拟字符串名称{get;set;} [显示名称(“技术类别”)] [必需] public int[]TechCategories{get;set;} 公共虚拟IEnumerable类别{get;set;} }_C#_Asp.net Mvc 4_Fluent Nhibernate_Many To Many_Automapper - Fatal编程技术网

C# nhibernate+;Automapper和多对多关系 公共类技术:EntityBase { [不空不空] [长度(ColumnMetadata.LongTextLength)] 公共虚拟字符串名称{get;set;} 公共虚拟IList TechCategories{get;set;} } 公共类技术分类:EntityBase { [非空] 公共虚拟技术技术{get;set;} [非空] 公共虚拟TechCategory TechCategory{get;set;} } 公共类TechCategory:ReferenceBase { } 公共类模型 { 公共虚拟整数Id{get;set;} [必需] 公共虚拟字符串名称{get;set;} [显示名称(“技术类别”)] [必需] public int[]TechCategories{get;set;} 公共虚拟IEnumerable类别{get;set;} }

C# nhibernate+;Automapper和多对多关系 公共类技术:EntityBase { [不空不空] [长度(ColumnMetadata.LongTextLength)] 公共虚拟字符串名称{get;set;} 公共虚拟IList TechCategories{get;set;} } 公共类技术分类:EntityBase { [非空] 公共虚拟技术技术{get;set;} [非空] 公共虚拟TechCategory TechCategory{get;set;} } 公共类TechCategory:ReferenceBase { } 公共类模型 { 公共虚拟整数Id{get;set;} [必需] 公共虚拟字符串名称{get;set;} [显示名称(“技术类别”)] [必需] public int[]TechCategories{get;set;} 公共虚拟IEnumerable类别{get;set;} },c#,asp.net-mvc-4,fluent-nhibernate,many-to-many,automapper,C#,Asp.net Mvc 4,Fluent Nhibernate,Many To Many,Automapper,这些是我上面的课程。因此,在绑定到控制器时,我忽略了multiselect下拉列表的类别集合。但是我无法让自动映射器将IList初始化为int[]TechCategories。有人能帮我把地图放在一起吗 public class Technology : EntityBase { [NotNullNotEmpty] [Length(ColumnMetadata.LongTextLength)] public virtual string Name { get; set;

这些是我上面的课程。因此,在绑定到控制器时,我忽略了multiselect下拉列表的类别集合。但是我无法让自动映射器将IList初始化为int[]TechCategories。有人能帮我把地图放在一起吗

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; }
}
Mapper.CreateMap()
.ForMember(c=>c.Categories,option=>option.Ignore())
.ReverseMap();

您希望在此处将复杂类型自动映射为简单类型,即IList=>int[]

我假设EntityBase有一些标识属性,例如Id

因此,以下映射可能适用于您:

Mapper.CreateMap<Technology, TechDetailModel>()
                .ForMember(c => c.Categories, option => option.Ignore())
                .ReverseMap();
Mapper.CreateMap()
.ForMember(c=>c.Categories,option=>option.Ignore())
.ForMember(c=>c.TechCategories,option=>option.MapFrom(src=>src.TechnologyTechCategories.Select(p=>p.TechCategories.Id));
鉴于从复杂到简单的映射,您将无法在此处使用ReverseMap

为了简化映射(以及您的对象模型),可能值得考虑更改现有的多对多映射。你真的需要那个“加入”课程吗。如果在Technology和TechCategory这两个类上都指定了IList,FluentNHibernate自动映射(假设您正在使用它)将为您创建联接表

           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)));