私は、マッピングがあります。Automapper.ProjectTo()がnull参照例外をスローするのはなぜですか?
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Foo, FooDto>()
.ForMember(dest => dest.Id,
opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.Name,
opt => opt.MapFrom(src => src.Name))
.ForMember(dest => dest.PhoneNumber,
opt => opt.MapFrom(src => src.PhoneNumbers.Number)) //etc.
});
をし、私はいくつかのアップ嘲笑EFのオブジェクトを呼び出すユニットテストでそれを使用しようとしている:
var ids = new List<string>()
{
"123";
"456";
"789";
};
var data = new List<Foo>();
foreach(var id in ids)
{
data.Add(new Foo() { Id = id });
}
this.mockContext = new Mock<entities>();
this.mockSet = new Mock<DbSet<Foo>>();
this.mockSet.As<IQueryable<Foo>>().Setup(p => p.Provider).Returns(data.Provider);
this.mockSet.As<IQueryable<Foo>>().Setup(p => p.Expression).Returns(data.Expression);
this.mockSet.As<IQueryable<Foo>>().Setup(p => p.ElementType).Returns(data.ElementType);
this.mockSet.As<IQueryable<Foo>>().Setup(p => p.GetEnumerator()).Returns(data.GetEnumerator());
私が直接エンティティを照会:
をvar id = "123";
var bar = this.mockContext.Object.Foo.Where(p => p.id == id);
IQueryable()が期待どおりの結果を返すようになりました。私はDTOに私のオブジェクトを投影ししようとすると、しかし:
var id = "123";
var buzz = this.mockContext.Object.Foo.Where(p => p.id == id).ProjectTo<FooDto>(this.config);
私はどのような方法で結果にアクセスしようとした場合、私は取り戻すのIQueryableは、null参照例外がスローされます。したがって、たとえば:
buzz.ToList();
buzz.SingleOrDefault(); // This mirrors the actual call in my code since this is a GetById query.
両方が失敗します。私はここで何が欠けていますか?