我正在完成我的作业 - 使用实体框架制作一个web api 2项目。
这是我的表格布局,Singer和Genre表之间有m-2-m关系。
My Genre是一张桌子,用于按字母顺序获取我的歌手名单(因此Genre表从(ID:1,姓名:" A")获取数据到(ID:26,名称:& #34; Z&#34)
现在我希望所有的歌手都能以#34; H" (ID = 8)
public IQueryable<Singer> GetByGenre(int id)
{
return db.Singers.Where(s => s.Genres.Any(g => g.ID == id));
}
使用此查询:
http://localhost:6798/api/Singers/GetByGenre?id=8
但结果很奇怪 - 只有第一个结果显示,而其他人则返回&#34; ref&#34; ?我通过创建一个&#34;假的&#34;列表
var list = db.Singers.Where(s => s.Genres.Any(g => g.ID == id)).ToList();
并对其进行调试,它返回正确的3个Singers?
-
如你所见,我还有其他表格(歌曲,播放列表,视频),其中FK指向我歌手的ID,所以我怎么才能只返回歌手表格的列(ID,NAME, IMAGE)没有所有其他关系数据(播放列表,歌曲,视频......)?
答案 0 :(得分:0)
为什么在返回的json结果中包含$ ref。
Json序列化程序包括$ ref来解决循环依赖。
在此处查看有关此Stackoverflow答案的详细信息 - &gt; Why is the Web Api returning empty json results with “$ref=”?
如何在没有所有其他关系数据(播放列表,歌曲,视频......)的情况下,仅返回歌手表的列(ID,NAME,IMAGE)?
您需要在实体框架dbcontext中禁用延迟加载。
像这样的事情:db.Configuration.LazyLoadingEnabled = false;
有关延迟加载和序列化的详细信息,请参阅this msdn文章。