Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尽管被告知不要先在实体框架代码中执行操作,但为什么要包含相关数据_C#_Asp.net_Entity Framework - Fatal编程技术网

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之前,您是否随时访问数据库?这实际上是第一次尝试。