0

我无法找到创建复杂 ViewModel 的正确方法。

B类型号:

public class A{public int A_id;}
public class B{
 public int B_id; 
 public string Name; 
 public virtual ICollection<A> A_Items;
}

视图模型 C 类:

public class C {public int B_id; public CountOfA;}

所以我试图找到另一种方法来包含 B 类中 A 的出现次数并将其放入 ViewModel 类 C 中。目前我可以通过创建自定义 IResolver 类来做到这一点,就像这样。

CreateMap<B,C>().ForMember(dest => dest.CountOfA, opt => opt.ResolveUsing<ListToCountResolver>());

所以然后在控制器中我使用“包含”方法来包含“A_Items”,这很好用。但是必须有一种更好的方法,当我想要的只是一个简单的 COUNT(*) 行时,不要从数据库中获取整个列表。或者每次我试图从 B 类中获取一些自定义值时,我是否必须创建一个自定义解析器。获取行数只是一个示例,但是如果我想使用 AutoMapper 将“A”集合的“名称”转换为单个字符串,用逗号分隔怎么办。那可能吗?仅供参考,我对 MVC 世界还很陌生,我正在努力坚持“精益控制器”、“胖模型”和“虚拟视图”的设计建议,这样我就可以遵循良好的实践。感谢您的输入。

4

1 回答 1

1

你能使用简单的MapFrom实现吗,看起来像这样:

Mapper.CreateMap<B, C>().ForMember(dest => dest.CountOfA, opt => opt.MapFrom(src => src.A_Items.Count()));

我创建了一个小单元测试,它工作正常。

var b = new B {A_Items = new Collection<A>{new A(), new A(), new A()}, B_id = 1};

var c = Mapper.Map<C>(b);

c.CountOfA.Should().Be(3);
c.B_id.Should().Be(1);
于 2013-01-04T01:05:17.660 回答