Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# ASP MVC、延迟加载和JSON序列化。如何填充其他属性?_C#_Asp.net Mvc_Json_Entity Framework_Serialization - Fatal编程技术网

C# ASP MVC、延迟加载和JSON序列化。如何填充其他属性?

C# ASP MVC、延迟加载和JSON序列化。如何填充其他属性?,c#,asp.net-mvc,json,entity-framework,serialization,C#,Asp.net Mvc,Json,Entity Framework,Serialization,好吧,我觉得这比它应该有的麻烦多了 我正在使用C#ASP mvc为移动应用程序制作REST api。我正在使用ASP MVC 4和EntityFramework 6 由于LazyLoading与JSON序列化不一致,我在EDMXXML中禁用了它 <EntityContainer Name="Entities" annotation:LazyLoadingEnabled="false"> 循环引用。为什么微软会允许你禁用延迟加载并显式加载不同的属性…这是延迟加载-超越我 然后

好吧,我觉得这比它应该有的麻烦多了

我正在使用C#ASP mvc为移动应用程序制作REST api。我正在使用ASP MVC 4和EntityFramework 6

由于LazyLoading与JSON序列化不一致,我在EDMXXML中禁用了它

    <EntityContainer Name="Entities" annotation:LazyLoadingEnabled="false">
循环引用。为什么微软会允许你禁用延迟加载并显式加载不同的属性…这是延迟加载-超越我

然后我创建了视图来加载相关的属性-但是linq或lambda不允许我将它们放入适当属性类型的列表中(这是由EF生成的,但又怎么样?)


所以我问,在序列化时,在不创建循环引用的情况下加载实体及其关联属性的最佳方法是什么?我错过了什么吗?

实际上你错过了不少

首先<代码>Json从未真正设计过。无论如何。所以它有一个非常突出的问题,它根本不能处理循环引用。有人试图修补这个问题,但作为标准,没有解决方案

其次,您希望使用
.DbSet.Include(user=>user.Following)
加载关联

第三,如果您使用的是WebApi,它应该使用Newtonsoft的Json序列化程序,它确实支持一种带有循环支持的自定义Json形式,google如何打开它

第四,由于N+1问题,EF允许您禁用延迟加载。许多开发人员宁愿看到自己的代码不起作用,所以他们知道该修复什么,也不愿让懒散的加载工作让他们的应用程序慢下来


这不是你的错,EF和WebApi有很多有趣的细微差别供你学习。

是否
Artist
是一个现有的类?首先,EF处理关联(嵌套类)很好。@TonyX嵌套类不是关联。它们是在另一个类的主体中声明的POCO。我明白了,但你的回答似乎暗示(承认,可能只是在我读到的时候)基于这个问题,你可以互换使用这些术语,因为我没有看到任何关于嵌套类的使用的具体内容,这似乎是实体关联和JSON序列化的问题。不要投你的反对票,因为答案中有一些好的信息,只是澄清一下。
    public JsonResult GetUser(int id)
    {

        var user = entities.UserProfiles.Find(id);
        entities.Entry(user).Collection(x => x.ArtistsFollowing).Load();


        return Json(user, JsonRequestBehavior.AllowGet);
    }