C# 尽管被告知不要先在实体框架代码中执行操作,但为什么要包含相关数据
我有以下代码来检索由特定教师创建的C# 尽管被告知不要先在实体框架代码中执行操作,但为什么要包含相关数据,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我有以下代码来检索由特定教师创建的discussionwalls(外键由创建)。每个讨论墙也可以有许多时间框架 当我序列化discussionwalls时,我看到每个DiscussionWall项都有关联的Teacher,在每个Teacher中我又有OwnedDiscussionWalls,这导致json输出出现问题 有人能解释一下为什么我的结果集中有相关的实体(Teacher),尽管我没有它的Include()语句 var discussionwalls = db.DiscussionWall
discussionwalls
(外键由创建)。每个讨论墙也可以有许多时间框架
当我序列化discussionwalls
时,我看到每个DiscussionWall
项都有关联的Teacher
,在每个Teacher中我又有OwnedDiscussionWalls
,这导致json输出出现问题
有人能解释一下为什么我的结果集中有相关的实体(Teacher
),尽管我没有它的Include()
语句
var discussionwalls = db.DiscussionWalls.Include(dw => dw.Timeframes)
.Where(dw => dw.CourseId == courseid)
.Where(dw => dw.CreatedBy == currUserId)
.ToList();
var serializerSettings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
string json = JsonConvert.SerializeObject(discussionwalls, Formatting.Indented, serializerSettings);
return json;
以下是教师课堂的相关部分:
public class Teacher
{
public List<DiscussionWall> OwnedDiscussionWalls { get; set; }
public List<DiscussionTimeframe> TimeframesCreated { get; set; }
}
公共课堂教师
{
public List OwnedDiscussionWalls{get;set;}
创建的公共列表时间框架{get;set;}
}
以下是DiscussionWall课程的相关部分:
public class DiscussionWall
{
[Required]
public string CreatedBy { get; set; }
[ForeignKey("CreatedBy")]
public Teacher Teacher { get; set; }
public List<DiscussionTimeframe> Timeframes { get; set; }
}
公共课堂讨论墙
{
[必需]
通过{get;set;}创建的公共字符串
[外键(“CreatedBy”)]
公共教师{get;set;}
公共列表时间范围{get;set;}
}
序列化程序通过访问属性导致教师实体延迟加载。关闭延迟加载或向linq查询添加显式选择。在DiscussionWall中的属性教师上添加[JsonIgnore]
public class DiscussionWall
{
[Required]
public string CreatedBy { get; set; }
[JsonIgnore]
[ForeignKey("CreatedBy")]
public Teacher Teacher { get; set; }
public List<DiscussionTimeframe> Timeframes { get; set; }
}
公共课堂讨论墙
{
[必需]
通过{get;set;}创建的公共字符串
[JsonIgnore]
[外键(“CreatedBy”)]
公共教师{get;set;}
公共列表时间范围{get;set;}
}
discussionwalls
在序列化程序之前已经有了教师实体。我已经在dbcontext类中放置了以下配置,但仍然存在保存问题:public gEchoLuDBContext():base(“gEchoLuMaster”){this.configuration.LazyLoadingEnabled=false;}
如果我以后需要Teacher
做其他用途怎么办?在需要时使用属性CreatedBy
获取Teacher
?那么,你的意思是JsonIgnore
不会引起麻烦吗?JsonIgnore
意味着当JsonConvert.SerializeObject
对象将忽略此属性。reference:[在查询DiscussionWalls之前,您是否随时访问数据库?这实际上是第一次尝试。