实体框架返回" $ ref"项目

时间:2015-05-20 07:06:33

标签: c# entity-framework

我正在完成我的作业 - 使用实体框架制作一个web api 2项目。

这是我的表格布局,Singer和Genre表之间有m-2-m关系。

enter image description here

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)没有所有其他关系数据(播放列表,歌曲,视频......)?

enter image description here

1 个答案:

答案 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文章。