Linq 如何在没有循环引用的情况下实现实体框架多对多关系的json序列化
我的数据库中有3个表-Linq 如何在没有循环引用的情况下实现实体框架多对多关系的json序列化,linq,json,asp.net-mvc-3,serialization,entity-framework-4,Linq,Json,Asp.net Mvc 3,Serialization,Entity Framework 4,我的数据库中有3个表-会议,活动类型和一个连接表会议活动。每个会议可能有零个或多个标准活动,每个活动可能在零个或多个会议中进行 会议(ConferenceID,ConferenceName) ConferenceActivities(ConferenceID,ActivityTypeID) ActivityTypes(ActivityTypeID、ActivityTypeDesc) 我在现有数据库上使用实体框架,在MVC3应用程序中使用.tt模板,我生成了一个DbContext和POCO对象,注
会议
,活动类型
和一个连接表会议活动
。每个会议可能有零个或多个标准活动,每个活动可能在零个或多个会议中进行
会议(ConferenceID,ConferenceName)
ConferenceActivities(ConferenceID,ActivityTypeID)
ActivityTypes(ActivityTypeID、ActivityTypeDesc)
我在现有数据库上使用实体框架,在MVC3应用程序中使用.tt模板,我生成了一个DbContext和POCO对象,注意到它只生成了两个对象,ActivityType
和Conference
,这很好,因为它似乎理解了中间表
它还为我的会议添加了一系列活动
public virtual ICollection<ActivityType> ActivityTypes { get; set; }
另一个建议是将模型上的延迟加载启用
属性设置为false。。这没有什么区别,我仍然得到递归错误
我已经尝试删除Virtual
关键字,我相信它可以关闭延迟加载。。和尝试。包括(…)但再次没有乐趣
另一个建议是将访问器从public
更改为internal
,但是这与序列化没有什么不同
有人还建议从ActivityType类中删除会议集合,这不是我真正想做的。。但这样做只会产生错误“指定的架构无效”
我正在使用我相信最新版本的nuget和相关的EF、脚手架和模板
我想要实现的是一种开箱即用的东西吗?如果是这样,我会错过什么设置?如果不是,这里的最佳实践是什么?我知道我能完成这项工作的唯一方法是自己手动构建对象
建议或一个完整的工作演示的链接(我已经看到很多建议和代码片段,但似乎不起作用!!)谢谢。我肯定有人做了这件事,而且一定能成功。不要把你的模型课传给别人。使用视图所需的数据或json输出创建viewmodel。我知道您尝试将其投影到匿名类型中,但将其投影到具体的viewmodel中,它应该可以完美地工作
public virtual ICollection<Conference> Conferences { get; set; }
public JsonResult GetConference(int conferenceId)
{
Conference x = context.Conferences.Include("ActivityTypes").FirstOrDefault<Conference>(i => i.EventID == eventId);
return Json(x, JsonRequestBehavior.AllowGet);
}
var thing = from r in context.Conferences
select new
{
r.ConferenceID,
r.ConferenceName,
ActivityTypes = new List<ActivityType>(
(from c in r.ActivityTypes
select new ActivityType()
{
ActivityTypeDesc = c.ActivityTypeDesc,
ActivityTypeID = c.ActivityTypeID
}).Cast<ActivityType>())
};
return Json(thing, JsonRequestBehavior.AllowGet);