0

我有两个具有多对多关系的实体。当我渴望使用 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 模式(请参阅创建通用存储库),因此加载实体:

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": [

         ...

传递自引用实体似乎真的很浪费。有什么办法可以防止这种情况发生吗?

4

1 回答 1

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
于 2013-07-18T23:41:49.317 回答