2014-05-09 3 views
0

****************이 문제가 해결되었습니다 (자체 유도 된 hehe입니다!). ****** ******* 그래서 "DrugOptions"를 UI에 쉽게 바인딩 할 수 있습니다. 나는 각 유형의 약물 옵션에 대해 약물에 대해 고객 속성을 만들었습니다.json 데이터가 너무 커서 (처리 됨) Breezejs 엔티티가 저장되지 않음

이 코드가 실제로 무엇을하는지 이해하지 못했습니다.breeze에 엔티티 변경 사항을 보내기 전에 clientside 속성을 제거하겠다고 생각했습니다. 그것은 목적이 아닙니다.

그래서 breeze는 클라이언트 측 속성에 대해 잘 모르기 때문에 혼동스러워했습니다.

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

나는 컨트롤러에 이러한 속성을 이동하고 지금은 완벽하게 괜찮습니다 :)

브리즈 내가 그것을 저장할 통과하고있는 객체 모델을 고려 매우 큰 파일을 생성 할 것으로 보인다.

약물 옵션 1 개를 사용할 수있는 의약품 옵션 1 개와 사용할 수있는 경로가 각각 하나씩있는 텍스트 입력란 만 저장합니다.

줄 14705에서 debug.breeze.js의 번들을 가져 와서 텍스트 파일에 저장할 때 파일은 35+ MB입니다. 이것은이 똑 바른 객체 모델에 대한 많은 양의 데이터처럼 보입니다.

개체만으로 json을 슬림하게 만들 수있는 방법이 있습니까? 그래서 IIS 설정을 변경할 필요가 없습니까?

****************** 바람이

Sample of json that's causing the problem

*********** 서버로 전송하고 수출 JSON 링크

**************** 여기 그래프 *************

Entire Graph

Drug Graph Item의 스크린 샷

,210

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

& 화제

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

약물 고체 옵션 액체, 흡입, 주사 추천 다른 상속 유형이 이전의 모든 클래스와 관련된 루트 클래스 :

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

하나의 엔티티 만 35MB? 다음과 같이 필터링하십시오 :'return entity.entityAspect.entityState! == breeze.EntityState.Unchanged' 그리고 크기를 다시 확인하십시오. –

+0

아니요, 1 개의 약물 옵션이있는 마약과 1 개의 가용 한 루트가 있습니다 .. 그래프는 그래프를 통해 필터링됩니다 = graph.filter (function (entity) { return entity.entityAspect.entityState.isAddedModifiedOrDeleted(); }); – GregL

+0

저장 번들에 실제로 무엇이 들어 있는지 알지 못한다면 말하기가 어렵습니다. 나에게 35MB를주지 마라 :-). 그곳에있는 것이 무엇이고 어떤 것이 큰지 말해주세요. 그 묶음에 실제로 2 ~ 3 개의 엔티티가 있다면 그게 어떻게 커지는지 상상할 수 없기 때문에 (저장하기 전에'graph' 배열에 2 ~ 3 개의 아이템 만 있습니다.) – Ward

답변

0

참조 질문의 맨 위에있는 업데이트. 이제는 모두 좋다 :)

+0

멋진 답변입니다. 좋은 직업 형제 –

관련 문제