LINQtoSQL - 保持自我引用

时间:2017-03-20 08:47:04

标签: json linq-to-sql

我有两个表,它们通过OneToMany关系链接在一起。 Table1具有Table2主键的外键。

当我使用LINQtoSQL获取Table1中的一行时,它会自动获取Table2的数据.Table2引用Table1中的行,它也试图获取..然后我们去了,无限循环

Guid productIdGuid = Guid.Parse(productId);
var info = (from row in db.Info
where row.ProductId == productIdGuid &&
row.ComputerId == null &&
row.DeletedAt == null
select row).FirstOrDefault();                
return license;      

当我将info转换为JSON时,我收到stackoverflow错误,其中包含以下内容:

JsonConvert.SerializeObject(info); 

然而我可以解决这个问题:

JsonConvert.SerializeObject(input, Formatting.Indented,
    new JsonSerializerSettings
    {
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
        PreserveReferencesHandling = PreserveReferencesHandling.Objects
    });

但这里的结果看起来不太好

{  
   "$id":"1",
   "ProductId":"a8a78902-777c-4be9-a240-a5e47af6f144",
   "ComputerId":null,
   "Table2":{  
      "$id":"2",
      "Id":"a8a78902-777c-4be9-a240-a5e47af6f144",
      "Reference":"10456975",
      "Table1":[  
         {  
            "$id":"3", 
            "ProductId":"a8a78902-777c-4be9-a240-a5e47af6f144",
            "ComputerId":"63e57ee7-14d3-e611-80dc-0050569ea396",
            "Table2":{  
               "$ref":"2"
            }
         },
         {  
            "$ref":"1"
         },
         .....
      ]
   }
}

我不希望它继续获取表之间的子节点/链接。我只想要一个链接,结果看起来像这样:

{  
   "$id":"1",
   "ProductId":"a8a78902-777c-4be9-a240-a5e47af6f144",
   "ComputerId":null,
   "Table2":{  
      "$id":"2",
      "Id":"a8a78902-777c-4be9-a240-a5e47af6f144",
      "Reference":"10456975",          
   }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以将Table2类中的[JsonIgnore]属性添加到您要忽略的所有属性,在您的情况下,这些属性将是Table1参考

public class Table2
{
    ...

    [JsonIgnore] 
    public ICollection<Table1> Table1 { get; set; }

    ...
}