我已经阅读了无数其他帖子,似乎无法弄清楚发生了什么,所以是时候寻求帮助了.
我正在尝试将包含集合的域实体映射到也包含集合的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; }
}
Run Code Online (Sandbox Code Playgroud)
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; }
}
Run Code Online (Sandbox Code Playgroud)
地图
Mapper.CreateMap<Foo, FooDto>();
Mapper.CreateMap<ICollection<Bar>, IEnumerable<BarDto>>();
Run Code Online (Sandbox Code Playgroud)
测试
// 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());
Run Code Online (Sandbox Code Playgroud)
我没有收到任何配置错误,Foo1映射得很好.
o.Bars是一个Castle.Core.Interceptor.IInterceptor[],不包含我的域实体的任何值...
我在这里失踪了什么?
Dar*_*rov 11
代替:
Mapper.CreateMap<ICollection<Bar>, IEnumerable<BarDto>>();
Run Code Online (Sandbox Code Playgroud)
试试简单:
Mapper.CreateMap<Bar, BarDto>();
Run Code Online (Sandbox Code Playgroud)
AutoMapper将负责其余部分.
| 归档时间: |
|
| 查看次数: |
3664 次 |
| 最近记录: |