我有两个具有多对多关系的实体。当我急切地使用Include()加载一个实体时,它会加载子项,并且还包括子项的子项。我不想要孙子。
我关闭了延迟加载:LazyLoadingEnabled = false;并且我忽略了自引用循环:
config.Formatters.JsonFormatter.SerializerSettings
.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling
.Ignore;
为了更好地解释事情:
public class A
{
public int Id { get; set; }
public ICollection<B> Bs { get; set; }
}
public class B
{
public int Id { get; set; }
public ICollection<A> As { get; set; }
}
我正在使用IUnitOfWork pattern(请参阅创建通用存储库),因此加载实体:
return unitOfWork.ARepository.Get(a => a.Id == Id, null, "Bs");
我找回了类似这样的JSON:
[
{
"Id": 1,
"Bs": [
{
"Id": 1,
"As": [
{
"Id": 2,
"Bs": [
...
},
{
"Id": 2,
"Bs": [
{
"Id": 1,
"As": [
{
"Id": 1,
"Bs": [
...
传递自引用实体似乎真的很浪费。有什么方法可以阻止这种情况吗?
答案 0 :(得分:0)
我将Newtonsoft.Json.JsonIgnoreAttribute添加到B类的As属性中。
public class B
{
public int Id { get; set; }
[JsonIgnore]
public ICollection<A> As { get; set; }
}
我认为这样做是安全的,因为我不会引用A类到B类。这种关系适用于EF Code First。
使用[JsonIgnore]使用Nuget(https://nuget.org/packages/newtonsoft.json/)安装它:
PM> Install-Package Newtonsoft.Json