Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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# 当使用fluent api包含相关数据时,列表不会在ajax中填充(使用Web api)_C#_Asp.net_Ajax_Entity Framework_Asp.net Web Api - Fatal编程技术网

C# 当使用fluent api包含相关数据时,列表不会在ajax中填充(使用Web api)

C# 当使用fluent api包含相关数据时,列表不会在ajax中填充(使用Web api),c#,asp.net,ajax,entity-framework,asp.net-web-api,C#,Asp.net,Ajax,Entity Framework,Asp.net Web Api,在我的ASP.NET Web表单应用程序(使用code first EF和Web Api)中,我需要使用ajax读取项目列表(list),并用以下代码填充帖子列表。然而,我有一个奇怪的问题,如下所述 function LoadPostsByTimeframe(currTimeframeId) { jQuery.support.cors = true; $.ajax({ url: '/api/post/GetPostsByTimeframe

在我的ASP.NET Web表单应用程序(使用code first EF和Web Api)中,我需要使用ajax读取项目列表(
list
),并用以下代码填充帖子列表。然而,我有一个奇怪的问题,如下所述

 function LoadPostsByTimeframe(currTimeframeId) {
        jQuery.support.cors = true;
        $.ajax({
            url: '/api/post/GetPostsByTimeframe?tfId=' + currTimeframeId,
            type: 'GET',
            contentType: "application/json; charset=utf-8;",
            dataType: 'json',
            success: function (response) {
                var posts = response.d;
                //do stuff
            },
            error: function (x, y, z) {
                alert(x + '\n' + y + '\n' + z);
            }
        });
    }
在控制器类中,当我使用以下方法检索项目列表时:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public IList<Post> GetPostsByTimeframe(int tfId)
    {
        gEchoLuDBContext db = new gEchoLuDBContext();
        var posts = db.Posts.Where(p=>p.TimeFrameId == tfId).ToList();

        return posts;           
    }
我有这个输出(只返回第一项,其余两项为空):

在这两种情况下(包括或不包括),控制器方法返回一个包含所有项的有效
列表。但是,对于Include版本,列表值(第一个值除外)不会显示在ajax/jquery端



你认为我遗漏了什么吗?

试着在
.ToList()
之前添加
.AsNoTracking()

试着添加
。AsNoTracking()
就在
之前。ToList()
试着在
之前添加
。AsNoTracking()
就在
之前添加
。ToList()

试着添加
.AsNoTracking()
就在
.ToList()之前

是的,它成功了!你能解释一下吗?我找到了这个解释,但它不太理解:返回一个新查询,其中返回的实体不会缓存在DbContext或ObjectContext中。使用AsNoTracking的一部分是,这些实体成为原始POCO对象,而不是可以作为引用的代理POCO对象(使用指针指向内存中已存在的对象,而不是该对象的多个副本)。但是,我不明白为什么它会在我的场景中造成麻烦?简单的回答是,你不应该像以前那样序列化代理POCO类,因为有时你可能无法得到你所期望的。也许你打开了延迟加载?是的,它起了作用!你能解释一下吗?我找到了这个解释,但它不太明白:返回一个返回的实体将不会缓存在DbContext或ObjectContext中的新查询。使用AsNotTrack的一部分是,实体将成为原始POCO对象,而不是可以作为引用的代理POCO对象(使用指针指向内存中已存在的对象,而不是该对象的多个副本)。但是,我不明白为什么它会在我的场景中造成麻烦?简单的回答是,你不应该像以前那样序列化代理POCO类,因为有时你可能无法得到你所期望的。也许你打开了延迟加载?是的,它起了作用!你能解释一下吗?我找到了这个解释,但它不太明白:返回一个返回的实体将不会缓存在DbContext或ObjectContext中的新查询。使用AsNotTrack的一部分是,实体将成为原始POCO对象,而不是可以作为引用的代理POCO对象(使用指针指向内存中已存在的对象,而不是该对象的多个副本)。但是,我不明白为什么它会在我的场景中造成麻烦?简单的回答是,你不应该像以前那样序列化代理POCO类,因为有时你可能无法得到你所期望的。也许你打开了延迟加载?是的,它起了作用!你能解释一下吗?我找到了这个解释,但它不太明白:返回一个返回的实体将不会缓存在DbContext或ObjectContext中的新查询。使用AsNotTrack的一部分是,实体将成为原始POCO对象,而不是可以作为引用的代理POCO对象(使用指针指向内存中已存在的对象,而不是该对象的多个副本)。但是,我不明白为什么它会在我的场景中造成麻烦?简单的答案是,您不应该像以前那样序列化代理POCO类,因为有时您可能无法获得预期的结果。也许您启用了延迟加载?
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public IList<Post> GetPostsByTimeframe(int tfId)
    {
        gEchoLuDBContext db = new gEchoLuDBContext();
        var posts = db.Posts.Include(po=>po.Person).Where(p=>p.TimeFrameId == tfId).ToList();

        return posts;           
    }