私のgetメソッドを使用して動作しますが、queryableを返すと失敗するという奇妙な問題に行き詰まりました。プロジェクションまたはクエリ可能を使用する際の制限はありますか? 私のコードは以下のように簡略化されています。
public class SimpleEntity
{
public long Id { get; set; }
public string Name { get; set; }
public virtual SimpleEntity Parent { get; set; }
public virtual ICollection<SimpleEntity> Children { get; set; }
public SimpleEntity()
{
Children = new List<SimpleEntity>();
}
}
public class SimpleEntityResponseDTO
{
public long Id { get; set; }
public string Name { get; set; }
public NameValueItem ParentReferral { get; set; }
public IEnumerable<NameValueItem> ChildReferrals { get; set; }
public NavigationFolderResponseDTO()
{
ChildReferrals = new List<NameValueItem>();
}
}
public class NameValueItem
{
public long Value { get; set; }
public string Name { get; set; }
}
Web API アクション:
[HttpGet, Queryable]
public IQueryable<SimpleEntityResponseDTO> List()
{
//Generic crudservice returning an iqueryable based on Set<SimpleEntity>
return _crudService.QueryableList().Project().To<SimpleEntityResponseDTO>();
}
[HttpGet]
public HttpResponseMessage Get(long id)
{
SimpleEntity result = _crudSrv.Get(id);
if (result != null)
return Request.CreateResponse<SimpleEntityResponseDTO>(HttpStatusCode.OK, Mapper.Map<SimpleEntity , SimpleEntityResponseDTO>(result));
else
return Request.CreateResponse(HttpStatusCode.NotFound);
}
そして今マッピング:
Mapper.CreateMap<SimpleEntity, SimpleEntityResponseDTO>()
.ForMember(to => to.ParentReferral, opt => opt.MapFrom(from => new NameValueItem { Name = from.Parent.Name, Value = from.Parent.Id }))
.ForMember(to => to.ChildReferrals, opt => opt.MapFrom(from => from.Children.Select(o => new NameValueItem {Name = o.Name, Value = o.Id}).ToList() ));
親マッピングは何があっても機能します。しかし、Children マッピングは以下の問題を引き起こしています。
get メソッドを使用してオブジェクトを取得すると、取得するエンティティに関係なく、すべてが機能します。リストを使用すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」、「d__b.MoveNext()\r\n--- 例外がスローされた前の場所からのスタック トレースの終わり ---\r\n」 . たとえば、 $filter=Id eq 5 (または任意の ID) を追加しようとしましたが、同じ問題が発生します。おそらく、誰かがここで何がうまくいかないのかを教えてくれますか?