Breezejs实体保存失败,因为json数据太大

Breezejs实体保存失败,因为json数据太大,json,iis,asp.net-web-api,breeze,hottowel,Json,Iis,Asp.net Web Api,Breeze,Hottowel,考虑到我要保存的对象模型,Breeze似乎正在创建一个非常大的文件 我只保存了一个药物实例,其中包含一个药物选项和一个可用路径,以及一些文本字段,每个字段中只有一个单词 当我从第14705行的debug.breeze.js中获取包并将其保存到文本文件时,该文件的大小为35+mb。对于这个直截了当的对象模型来说,这似乎是一个惊人的数据量 有没有办法只使用对象来精简json?所以我不必更改IIS设置 ******************指向breeze发送到服务器的导出json的链接********

考虑到我要保存的对象模型,Breeze似乎正在创建一个非常大的文件

我只保存了一个药物实例,其中包含一个药物选项和一个可用路径,以及一些文本字段,每个字段中只有一个单词

当我从第14705行的debug.breeze.js中获取包并将其保存到文本文件时,该文件的大小为35+mb。对于这个直截了当的对象模型来说,这似乎是一个惊人的数据量

有没有办法只使用对象来精简json?所以我不必更改IIS设置

******************指向breeze发送到服务器的导出json的链接***********

****************这是图表的屏幕截图*************

my datacontext.saveChanges代码

       function saveDictionaryChanges(entity) {
            var graph = manager.getEntityGraph(entity,  'drugIndications, ' +
                  'drugOptions, ' +
                  'drugOptions.concentrations, ' +
                  'drugOptions.availableRoutes, ' +
                  'drugOptions.availableDrugForms, ' +
                  'drugOptions.availableUnits');

        // Filter for changes only  
        graph = graph.filter(function (entity) {
            return entity.entityAspect.entityState.isAddedModifiedOrDeleted();
        });

        return manager.saveChanges(graph)
            .then(saveSucceeded, saveFailed);


        function saveSucceeded(result) {
            //TODO: Commented out because WIP is on the back burner
            //zStorage.save();


            logSuccess('Saved Data', result, true);
        }

        function saveFailed(error) {
            var msg = config.appErrorPrefix + 'Save failed: ' +
                breeze.saveErrorMessageService.getErrorMessage(error);
            error.message = msg;

            logError(msg, error);
            throw error;

        }

    }
我的对象模型是

还有其他4种遗传途径类型:液体、吸入、注射和局部。我只加入了一些有效的方法来帮助缩短问题的时间

     public class AvailableRoute {
        public int Id { get; set; }
        public int DrugOptionId { get; set; }
        public int RouteId { get; set; }
       public virtual Route Route { get; set; }
     }

    public class AvailableSolidRoute : AvailableRoute {
       public AvailableSolidRoute( ) { }
    }
   public abstract class Concentration {        
          public int Id { get; set; }
          public int DrugOptionId { get; set; }
          public DrugOption DrugOption { get; set; }
          public decimal Measure{ get; set; }
          public int MassUnitId { get; set; }
          public virtual Unit MassUnit { get; set; }
          public int VolumeUnitId { get; set; }
          public virtual Unit VolumeUnit { get; set; }
          public int? DrugFormId { get; set; }
          public virtual DrugForm DrugForm { get; set; }        
          public int DisplayOrder { get; set; }             
   }

   public class LiquidConcentration : Concentration {
      public LiquidConcentration( ) {}
   }
还有一种吸入、注射和局部浓缩对象是从浓缩中继承而来的。我只是想缩短问题的时间

     public class AvailableRoute {
        public int Id { get; set; }
        public int DrugOptionId { get; set; }
        public int RouteId { get; set; }
       public virtual Route Route { get; set; }
     }

    public class AvailableSolidRoute : AvailableRoute {
       public AvailableSolidRoute( ) { }
    }
   public abstract class Concentration {        
          public int Id { get; set; }
          public int DrugOptionId { get; set; }
          public DrugOption DrugOption { get; set; }
          public decimal Measure{ get; set; }
          public int MassUnitId { get; set; }
          public virtual Unit MassUnit { get; set; }
          public int VolumeUnitId { get; set; }
          public virtual Unit VolumeUnit { get; set; }
          public int? DrugFormId { get; set; }
          public virtual DrugForm DrugForm { get; set; }        
          public int DisplayOrder { get; set; }             
   }

   public class LiquidConcentration : Concentration {
      public LiquidConcentration( ) {}
   }
有4种其他遗传类型,如固体液体、吸入、注射和局部

   public class DrugOption {
         public int Id { get; set; }
         public int DrugId { get; set; }
         public Drug Drug { get; set; }  

         public List<AvailableDrugForm> AvailableDrugForms { get; set; }
         public List<AvailableRoute> AvailableRoutes{ get; set; }
         public List<AvailableUnit> AvailableUnits { get; set; }
         public List<Concentration> Concentrations { get; set; }
         public string SpecialInstructions { get; set; }
   }

   public class SolidOption : DrugOption  {
         public SolidOption( ) { }
   }
公共类选项{
公共int Id{get;set;}
public int DrugId{get;set;}
公共药物{get;set;}
公共列表可用的rugforms{get;set;}
公共列表可用输出{get;set;}
公共列表可用单元{get;set;}
公共列表{get;set;}
公共字符串SpecialInstructions{get;set;}
}
公共类SolidOption:DrugOption{
公共选项(){}
}
Drug是以前所有类都与之相关的根类:

   public class Drug {
          public int Id { get; set; }
          public string Name { get; set; }
          public string Alias{ get; set; }
          public string Directions { get; set; }
          public bool DirectionsIsEditable { get; set; }
          public string SpecialDirections { get; set; }
          public bool SpecialDirectionsIsEditable { get; set; }
          public int? DisplayOrder { get; set; }
          public IList<DrugIndication> DrugIndications { get; set; }
          public IList<DrugOption> DrugOptions { get; set; }

         public Drug( ) { }
  }
公营药品{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串别名{get;set;}
公共字符串方向{get;set;}
公共bool方向可编辑{get;set;}
公共字符串SpecialDirections{get;set;}
public bool specialdirections可编辑{get;set;}
公共int?显示顺序{get;set;}
公共IList药物适应症{get;set;}
公共IList选项{get;set;}
公共药物({}
}

*******************我已修复此问题(是自激的呵呵!)******************
因此,为了更容易地将我的“DrugOptions”绑定到UI。我创造 每种药物选项的药物客户端属性

我不明白这段代码实际上在做什么。。我想它会的 将实体更改发送到breeze之前,请删除clientside属性。这不是它的目的

因此,breeze对客户端属性感到困惑是正确的,因为它不知道这些属性

        if (changedProp === 'solidOption') {
            delete changeArgs.entity.entityAspect.originalValues[changedProp];
        }

我将这些属性移到了控制器上,现在一切都很好:)

35+mb仅用于一个实体?尝试按如下方式进行筛选:
return entity.entityAspect.entityState!==breeze.EntityState.Unchanged
并再次检查大小。这是一种具有1种药物选项和1种可用路线的药物。。图形通过graph=graph.filter(函数(实体){return entity.entityAspect.entityState.isAddedModifiedOrDeleted();})进行过滤;很难说,除非我知道save bundle中的实际内容。不要给我35MB:-)。告诉我那里有什么,什么东西是大的。因为我无法想象,如果你真的只有两个或三个实体在这个捆绑包中(在保存之前,
图形
数组只有2个或3个项目,对吧?)那么你怎么会变得这么大呢?是的,它是一种药物,药物选项,可用的药物。。。当我从上面提到的breeze库复制json并将其放入文本文件时,保存了它,文件大小为35mb。我可以在周一上午将文件放在一个驱动器上,如果你愿意,可以发布一个指向它的链接?…问题可能是因为drugoption有可用路由的列表(在本例中为1),并且我还将可用路由映射到getEntityGraph中…因为它不会将可用路由放在图形中保存。