在 Asp.net MVC 中检测到 属性 的自引用循环 Angular 2
Self referencing loop Detected for property in Asp.net MVC with Angular 2
- 我已经创建了一个数据库,因为我有多个表,它们之间有关系。
- 当尝试从我的 WEb 应用程序获取数据时出现此错误
"'Self referencing loop detected with type 'System.Data.Entity.DynamicProxies.PrescriptionMaster_2C4C63F6E22DFF8E29DCAC8D06EBAE038831B58747056064834E80E41B5C4E4A'. Path '[0].Patient.PrescriptionMasters"
- 我不明白为什么会出现此错误,当我删除表之间的关系时,我会从中获得正确的数据。
我尝试过其他解决方案,例如添加
"config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling
= Newtonsoft.Json.ReferenceLoopHandling.Ignore; “
在 Webconfig.cs 但对我没有任何作用。
请帮帮我,我该怎么办?
只需将此添加到 Global.asax
中的 Application_Start
:
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter
.SerializerSettings
.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
它将忽略指向对象的引用。
防止这种情况发生的唯一正确方法是不发送Entity Framework对象(可能包含此类循环)到JSON Serializer(不太擅长知道何时停止序列化)。
相反,创建模仿前端实际需要的 EF 对象部分的 ViewModel,然后使用 EF 对象填充这些 ViewModel。
一种简单快捷的方法是只使用匿名对象,例如:
return new
{
Product = new
{
Id = EF_Product.Id,
Name = EF_Product.Name
}
};
一个好的经验法则是仅将 EF 对象的简单属性(数字、布尔值、字符串、日期时间)分配给 ViewModel 项。一旦您遇到一个 EF 对象 属性 是另一个 EF 对象(或 EF 对象的集合),那么您还需要将它们转换为未链接到 EF 的 'simple' 对象。
在频谱的另一端,有诸如 AutoMapper 之类的库。如果您决定需要实际的 ViewModel 类,那么 AutoMapper 将帮助以非常结构化的方式将 EF 对象映射到那些 ViewModel。
- 我已经创建了一个数据库,因为我有多个表,它们之间有关系。
- 当尝试从我的 WEb 应用程序获取数据时出现此错误
"'Self referencing loop detected with type 'System.Data.Entity.DynamicProxies.PrescriptionMaster_2C4C63F6E22DFF8E29DCAC8D06EBAE038831B58747056064834E80E41B5C4E4A'. Path '[0].Patient.PrescriptionMasters"
- 我不明白为什么会出现此错误,当我删除表之间的关系时,我会从中获得正确的数据。
我尝试过其他解决方案,例如添加
"config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; “
在 Webconfig.cs 但对我没有任何作用。
请帮帮我,我该怎么办?
只需将此添加到 Global.asax
中的 Application_Start
:
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter
.SerializerSettings
.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
它将忽略指向对象的引用。
防止这种情况发生的唯一正确方法是不发送Entity Framework对象(可能包含此类循环)到JSON Serializer(不太擅长知道何时停止序列化)。
相反,创建模仿前端实际需要的 EF 对象部分的 ViewModel,然后使用 EF 对象填充这些 ViewModel。
一种简单快捷的方法是只使用匿名对象,例如:
return new
{
Product = new
{
Id = EF_Product.Id,
Name = EF_Product.Name
}
};
一个好的经验法则是仅将 EF 对象的简单属性(数字、布尔值、字符串、日期时间)分配给 ViewModel 项。一旦您遇到一个 EF 对象 属性 是另一个 EF 对象(或 EF 对象的集合),那么您还需要将它们转换为未链接到 EF 的 'simple' 对象。
在频谱的另一端,有诸如 AutoMapper 之类的库。如果您决定需要实际的 ViewModel 类,那么 AutoMapper 将帮助以非常结构化的方式将 EF 对象映射到那些 ViewModel。