【发布时间】:2018-06-10 16:23:19
【问题描述】:
如何在 MVC 中解决这个问题
我有以下数据模型
public class Game
{
public int GameID { get; set; }
public string Name { get; set; }
public virtual ICollection<Player> Players { get; set;
}
public class Player
{
public int PlayerID { get; set; }
public string Name { get; set; }
public int GameID { get; set; }
public virtual Game Game { get; set; }
}
在 Context 类中我创建了两个数据集
public DbSet<Game> Games { get; set; }
public DbSet<Player> Players { get; set; }
我现在有一个简单的 MVC 控制器,它应该通过 Get API 返回一个 json 数据集,其中包含游戏列表和每个游戏的玩家列表...
我尝试了 MVC 控制器的这种实现
public JsonResult Games()
{
var Games = db.Games;
return Json(Games, JsonRequestBehavior.AllowGet);
}
有了这个,我收到一个错误,告诉我已经有一个打开的数据读取器。 我有点理解,但我没有解决它的知识。
为了解决它,我尝试将其放入列表中
public JsonResult Games()
{
var Games = db.Games.ToList();
return Json(Games, JsonRequestBehavior.AllowGet);
}
那时我得到一个循环引用错误。 (我猜它来自每个玩家的虚拟游戏。但如果我需要呢?
解决这个问题的正确和简单的方法是什么?
我想它必须是基本的东西,因为它是基本的父/子配置。但我错过了一些东西。
【问题讨论】:
-
你能补充一下你面临的异常吗?
-
一个游戏有多个玩家,然后他们又属于不同的游戏。 EF 不知道如何插入/删除它们(确定正确的顺序)。如果游戏应该是玩家的反向导航属性,那么配置它。否则,使用 on delete no action (WillCascadeOnDelete(false)) 删除级联删除路径。
-
在序列化“System.Data.Entity.DynamicProxies.Game_23DD4D297E2691F50FB8C725AD19E2C8515BFF41849592FD2558443A79BD0918”类型的对象时检测到循环引用。
-
我不想插入或删除它。我只是想找回它 DevilCuichiro
-
您面临的异常与EF无关。不过,您应该先执行查询,然后再将其提供给 JSON 序列化程序。
标签: c# json asp.net-mvc entity-framework parent-child