1

Automapper Queryable Extensions を使用しようとしていますが、マップされた子参照型のプロパティがソース オブジェクトで 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」オブジェクトの Bar プロパティが null であるため)。「foo」オブジェクトに Bar プロパティが設定されている場合、例外は発生しません。

次のように FooDTO クラスを変更すると:

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

(つまり、Bar プロパティを BarDTO ではなく Bar 型に変更しました)、null 参照例外は発生せず、すべて正常に動作します。

4

0 に答える 0