我正在使用 EF 5 和 ASP.NET Web API 从我的控制器返回 JSON。我的例子是宠物服务。对于这个问题,实体是Client
、Pet
和Veterinarian
。关系是:
客户 => 一对多 => 宠物 => 一对一 => 兽医
并且,颠倒层次结构:
兽医 => 一对多 => 宠物 => 一对一 => 客户
在我PetsController
的 中,GetPets
动作如下所示:
var pets= db.Pets
.Where(p => p.IsActive == true)
.Include(p => p.Client)
.Include(p => p.Veterinarian);
return Mapper.Map<IEnumerable<Pet>, IEnumerable<PetDTO>>(pets); // Using Automapper to map to a DTO
生成的 JSON 包含 Pets,每个 Pet 一个 Client,每个 Pet 一个 Veterinarian ,每个 Veterinarian,一个 Pets 集合。
我理解为什么宠物集合会出现在 JSON 中,但它与控制器操作中的宠物列表无关(至少现在不是)。我正在寻找一种优雅的方式来删除宠物的集合。现在我正在使用感觉像黑客的东西:
var pets= db.Pets
.Where(p => p.IsActive == true)
.Include(p => p.Client)
.Include(p => p.Veterinarian);
foreach (Pet pet in pets) {
pet.Veterinarian.Pets = null; // Remove the Pets collection before serializing
}
return Mapper.Map<IEnumerable<Pet>, IEnumerable<PetDTO>>(pets); // Using Automapper to map
我已经用序列化器和一些IQuerable
方法(其中许多我不熟悉)尝试了一些东西,但无济于事。