2016-06-03 6 views
0

"변경 사항 검사기"를 실현하려고합니다. 프론트 엔드에서 백엔드 및 앵귤러 엔티티 프레임 워크를 사용하고 있습니다. WebApi를 통한 통신. 많은 이유로 클라이언트가 List<DepartmentSettingDto> 및 다른 속성을 내 컨트롤러로 보냅니다. 이 목록에는 사용자가 수정할 수없는 여러 개체가 포함될 수 있습니다. DepartmentSetting에 db의 데이터가 변경되지 않으면 데이터베이스를 업데이트하고 싶지 않습니다.데이터베이스를 업데이트하기 전에 dto가 변경되었는지 확인하는 방법은 무엇입니까?

public void UpdateDepartmentsSettings(DepatmentsSettingsDto depatmentsSettings) 
{ 
    using (var transaction = new TransactionScope(TransactionScopeOption.RequiresNew 
     , new TransactionOptions {IsolationLevel = IsolationLevel.Serializable})) 
    { 
     foreach (var departmentSetting in DepatmentsSettingsDto.DepartmentSettings) 
     { 
      var currentSetting = _context.DepartmentSettings.Find(departmentSetting.Id) 
      if departmentSetting.Modified(currentSetting) 
      { 
       var newSetting = Mapper.Map<DepartmentSettingDto, DepartmentSetting> 
        (departmentSetting, currentSetting); 
       Mapper.Map(currentSetting, newSetting); 
      } 
     }     
     _context.SaveChanges(); 
     transaction.Complete(); 
    } 
} 

이 가능 수정되지 않은 변경 사항을 저장하지 않도록하기 위해이 같은 확장 방법 또는 뭔가를 쓰기 : 나는 이런 식으로 뭔가를 갖고 싶어? 미리 감사드립니다.

+1

앵귤러 태그는 무엇입니까? – ryanyuyu

+0

아마도 프런트 엔드에서이를 처리하고 업데이트해야하는 항목 만 보냅니 까? http://stackoverflow.com/questions/17648822/how-to-save-rows-in-a-grid-that-i-made-a-change-to –

답변

1

확장 메서드를 사용하면 개체의 속성을 반복하여 검사해야합니다. 더 나은 해결책은 Equals (및 GetHashCode)을 오버로드하고 DB를 업데이트하기 전에 동등성을 테스트하는 것입니다. 이 방법을 오버로드하는 방법에 대한 자세한 내용은 this SO post을 확인하십시오.

프런트 엔드를 제어 할 수 있다면 다른 도움이 될 수 있습니다. 이 경우 가능한 프론트 엔드가 DTO와 함께 해당 플래그를 변경하여 보낼 수있는 속성의 변경 사항을 감시해야합니다. 나는. 변경이 일어날 수있는 모든 HTML 엘리먼트에 CSS 클래스를 추가하고 jQuery 핸들러에 연결한다. 첫 번째 변경이 발생한 후 분리 할 수 ​​있습니다. 그런 식으로 평등을 검사하기 위해이 특정 레코드에 대한 DB 쿼리를 수행 할 필요가 없습니다. 프론트 엔드가 그렇게 말할 경우 업데이트를 발행하십시오.

<input type="hidden" id="isThereChanges" value="false" /> 

<div> 
    <input type="text" class="editor-field" /> 
    <input type="text" class="editor-field" /> 
    <input type="checkbox" class="editor-field" /> 
    <input type="radio" class="editor-field" /> 
</div> 

<script> 
    $(document).ready(function() { 
     $(".editor-field").on("change", ChangeDetected); 
    }); 

    function ChangeDetected() { 
     $(isThereChanges).val(true); 
     $(".editor-field").off("change", ChangeDetected); 
    }   
</script> 

음이 숨겨진 필드와 함께 작동하지만 당신은 당신의 DTO의 필드로 교체 또는 기반으로, 변화가없는 경우에도 웹 서버를 방해 할 수 없습니다

무슨 뜻인지입니다 당신이 WebAPI에 AJAX 요청을 보내기 바로 전에 ...

관련 문제