我的AutoMapper配置如下所示
public static class AutoMapperConfig
{
public static void ConfigureAutoMapper(this IMapperConfigurationExpression cfg)
{
cfg.CreateMap<Foo, BarDTO>()
.ForMember(dto => dto.Genres, o => o.ResolveUsing(b =>
{
var retVal = new List<string>();
foreach (var genre in b.Genres)
{
retVal.Add(genre.Genre.GenreName);
}
return retVal;
}));
}
}
BarDTO的属性类型是类型字符串
的集合这最终会出现异常:
System.InvalidOperationException:'类型没有通用方法'ToList' 'System.Linq.Enumerable'与提供的类型兼容 参数和论点。如果是,则不应提供类型参数 方法是非通用的。 “
如果我尝试这样做:
cfg.CreateMap<Foo, BarDTO>()
.ForMember(dto => dto.Genres, conf => conf.MapFrom
(
ol => ol.Genres.Select(tr => tr.Genre.GenreName).ToList())
);
这不会抛出任何异常,但没有任何反应。看起来像无限映射(加载)。
提前谢谢!
编辑:
这是我的课程。我使用Entity-Framework Core 2.0,这就是我必须自己创建与Foo2Genre的n到m关系的原因。
public class BarDTO
{
public BarDTO()
{
Genres = new List<string>();
}
public ICollection<string> Genres { get; set; }
}
public class Foo
{
public Foo()
{
Genres = new List<Foo2Genre>();
}
public ICollection<Foo2Genre> Genres { get; set; }
}
public class Foo2Genre
{
public int FooId{ get; set; }
public Foo Foo{ get; set; }
public int GenreId { get; set; }
public Genre Genre { get; set; }
}
public class Genre
{
public Genre()
{
Foos = new List<Foo2Genre>();
}
public string GenreName { get; set; }
public ICollection<Foo2Genre> Foos{ get; set; }
}
答案 0 :(得分:1)
我认为你需要一个包含类型。这将在EF6中发挥作用。