AutoMapper可查询扩展在空映射引用类型上引发空例外

时间:2013-07-24 10:00:46

标签: automapper iqueryable

我正在尝试使用Automapper可查询扩展,但我遇到了源对象上为null的映射子引用类型属性的问题。

基本上如果我们有这个:

public class Foo
{
    public int Id { get; set; }
    public String Name { get; set; }
    public virtual Bar Bar { get; set; }
}

public class Bar
{
    public int Id { get; set; }
    public String Name { get; set; }
}

public class FooDTO
{
    public int Id { get; set; }
    public String Name { get; set; }
    public virtual BarDTO Bar { get; set; }
}

public class BarDTO
{
    public int Id { get; set; }
    public String Name { get; set; }
}

我们尝试按如下方式进行投影:

 // Arrange
 Mapper.CreateMap<Foo, FooDTO>();
 Mapper.CreateMap<Bar, BarDTO>();

 var bar = new Bar { Id = 1, Name = "bar" };
 var foo = new Foo { Id = 1, Name = "foo" };

 var bie = new Bar { Id = 2, Name = "bie" };
 var noo = new Foo { Id = 1, Name = "noo", Bar = bie };

 var foobar = new List<Foo> { foo, noo }.AsQueryable();

 // Act
 var foobarProjection = foobar.Project().To<FooDTO>().ToList();

引发NullReferenceException(因为“foo”对象具有null Bar属性)。如果“foo”对象设置了Bar属性,则不会引发异常。

如果我按如下方式更改FooDTO类:

public class FooDTO
{
    public int Id { get; set; }
    public String Name { get; set; }
    public virtual Bar Bar { get; set; }
}

(换句话说,我已将Bar属性更改为Bar类型,而不是BarDTO类型),然后我没有得到空引用异常,一切正常。

0 个答案:

没有答案