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

时间:2014-05-09 13:30:31

标签: json iis asp.net-web-api breeze hottowel

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

我只保存一个药物实例,其中1个药物选项包含1个可用路线,而一些文本字段则包含一个单词。

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

有没有办法只用物体来减少json?所以我不必改变IIS设置?

******************链接到微风发送到服务器的导出的json ***********

Sample of json that's causing the problem

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

Entire Graph

Drug Graph Item

Solid Option Graph Item

Available Solid Route

我的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种其他遗传可用途径类型为液体,吸入,注射和局部。我只包括了AvailableSolidRoutes来帮助缩短他的问题。

     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( ) { }
    }

还有吸入,注射和吸入;从浓度中继承的局部浓缩物。我只提供LiquidConcentration来帮助缩短问题。

   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种继承类型,如固体选项Liquid,Inhalation,Injectable&局部

   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( ) { }
   }

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( ) { }
  }

1 个答案:

答案 0 :(得分:0)

*****************我解决了这个问题(自我诱导嘿嘿!)*************
因此,为了更容易将我的“DrugOptions”绑定到UI。我建立 针对每种药物选择的药物的客户属性。

我不明白这段代码到底在做什么..我添加它认为它会 在将实体更改发送到breeze之前删除clientside属性。这不是它的目的。

正确的微风对于客户端属性感到困惑,因为它不了解它们。

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

我将这些属性移动到Controller,现在完全没问题了:)