EF Code First では、連絡先とリストの間に多対多の関係があります。ProxyCreation と LazyLoading を無効にして、エンティティのシリアル化を許可します。
特定のリストにある連絡先を返すためのクエリがあります。
// GET api/Contacts
[Queryable]
public IQueryable<Contact> GetContacts(int bulkListId)
{
var bulkList = db.BulkLists.Include(c => c.Contacts).Where(c => c.ID == bulkListId).SingleOrDefault();
if (bulkList == null)
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
return bulkList.Contacts.AsQueryable().OrderBy(c => c.ID).Include(c => c.AddressBookType).Include(c => c.BulkLists);
}
これは機能しますが、意図したとおりには機能しません。これにより、特定のリストにある連絡先の正しいセットが得られますが、これらの連絡先には、関係の Lists プロパティに入力されたリストしかありません。したがって、これがシリアル化されてクライアントに返されると、連絡先がメンバーである他のリストが非表示になります。
この方法でクエリがどのようにフィルター処理されているのか、またリストの完全なセットを含めるように変更する方法がわかりません。アドバイスをいただければ幸いです。