2011-05-07 170 views
4

我读过无数其他帖子,似乎无法弄清楚发生了什么,所以现在是时候寻求帮助。自动映射器集合

我试图将包含集合的域实体映射到也包含集合的dtos。

这是一个简单的例子; (ⅰ提前的代码壁道歉,我试图保持它尽可能短):

实体

public class Foo 
{ 
    public Foo() 
    { 
     Bars = new List<Bar>(); 
    } 
    public string Foo1 { get; set; } 
    public ICollection<Bar> Bars { get; set; } 
} 
public class Bar 
{ 
    public string Bar1 { get; set; } 
} 

DTOS

public class FooDto 
{ 
    public FooDto() 
    { 
     Bars = new List<BarDto>(); 
    } 
    public string Foo1 { get; set; } 
    public IEnumerable<BarDto> Bars { get; set; } 
} 
public class BarDto 
{ 
    public string Bar1 { get; set; } 
} 

地图

Mapper.CreateMap<Foo, FooDto>(); 
Mapper.CreateMap<ICollection<Bar>, IEnumerable<BarDto>>(); 

测试

// Arrange 
var e = new Foo 
{ 
    Foo1 = "FooValue1", 
    Bars = new List<Bar> 
    { 
     new Bar 
     { 
      Bar1 = "Bar1Value1" 
     }, 
     new Bar 
     { 
      Bar1 = "Bar2Value1" 
     } 
    } 
}; 


// Act 
var o = Mapper.Map<Foo, FooDto>(e); 

// Assert 

Mapper.AssertConfigurationIsValid(); 
Assert.AreEqual(e.Foo1, o.Foo1); 
Assert.IsNotNull(o.Bars); 
Assert.AreEqual(2, o.Bars.Count()); 

我没有得到任何配置错误和Foo1是映射就好了。

o.Bars是Castle.Core.Interceptor.IInterceptor[]并且不包含任何从我的域实体的价值观......

我失去的是什么?

回答

11

相反的:

Mapper.CreateMap<ICollection<Bar>, IEnumerable<BarDto>>(); 

尝试简单:

Mapper.CreateMap<Bar, BarDto>(); 

其余AutoMapper will take care

+0

去图;我知道我忽略了一些简单的东西。不能给你信用7分钟。谢谢您的帮助! – 2011-05-07 20:14:47