기존의 모든 breezej 예제가 BreezeController
사이의 엔티티 모델을 전달하는 것 같습니다.SaveChanges()는 BreezeController에서 어떻게 호출됩니까?
그러나 제작 된 거의 모든 페이지는 일부 형식의보기 모델을 사용하고 있습니다. 우리는 BreezeJ가없는 시대에 데이터 (도메인 모델)를 저장소에서 검색하여 (AutoMapper를 사용하거나 수동으로) 해당 뷰에 필요한 데이터 만 포함하는 뷰 모델을 채 웁니다. WebAPI는 클라이언트 측 뷰 모델 (일반적으로 knockout
관찰 가능)을 채울 수있는 브라우저로 뷰 모델 데이터 만 보냅니다.
데이터를 저장할 때 <form>
에서 데이터를 수집하여 입력보기 모델을 채우고 해당 데이터 만 서버로 보내면 입력보기 모델의 데이터는 도메인 모델에 매핑됩니다. 업데이트는 저장소의 DbContext
엔터티에 SaveChanges()
을 호출하여 저장됩니다.
이제 BreezeJs
은 EFContextProvider
을 생성하여 Google의 모든 저장소 코드를 인계받습니다. 내가 본 예는 일반적으로 도메인 모델 데이터를 검색 한 다음 클라이언트 측에 모두 전달합니다.
[HttpGet]
public IQueryable<Item> Items() {
return _contextProvider.Context.Items;
}
뷰 모델을 작성하는 것은 클라이언트 측 javascript의 작업입니다.
[HttpGet]
public List<ItemViewModel> Items() {
var items = _contextProvider.Context.Items
.Include("RelatedEntity")
.ToList();
var model = new List<ItemViewModel>();
.... some code to build model from items ....
return model;
}
장점은 적은 데이터가 네트워크를 통해 전송되는 것입니다, 우리는 서버 측에서 많은 조작을 수행 할 수 있습니다 우리는 서버 측에서 뷰 모델을 구축하는 과정의
가 가능하다 . 그러나 이것을 BreezeController
처럼 수정하는 것이 좋은 실행인지 여부는 알 수 없습니다. 그러나 적어도 모든 항목을 나열하는 데 필요한 데이터를 반환합니다.
POST 데이터를 다시 보내려고하면 실제 문제가 발생합니다.
내가 발견 한 BreezeJs 예제에서는 을 사용하여 모든 도메인 모델 데이터를 저장합니다 (예 : vm.items
). 그런 다음 새 레코드 newItem
은 manager.createEntity
에 의해 도메인 모델로 빌드됩니다. 데이터 유효성을 확인한 후 item.entityAspect.validateEntity()
을 입력하면 이 vm.items
으로 푸시되고 manager.saveChanges()
이 호출되어 BreezeController에서 SaveChanges()
을 호출합니다.
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle) {
return _contextProvider.SaveChanges(saveBundle);
}
너무 많은 것들이 인계되었습니다. (. 당신이 동의하지 않는 경우 나 웃음) 내 질문은 :
수 있습니까 단지
createEntity
다음saveChanges
? 입력하고 제출할 빈 양식 만 있습니다. 클라이언트 쪽에서 전체items
배열을 만들 필요는 없습니다.JObject
으로 입력보기 모델을 전달하고_contextProvider.SaveChanges()
을 호출하기 전에 서버 측 처리를 수행 할 수 있습니까?
이 다시 슈퍼 긴 포스트 것으로 밝혀졌습니다. 모든 것을 읽어 주셔서 감사합니다. 정말 감사합니다!