2010-07-27 2 views
3

나는 다음과 같은 사용 사례에 어려움을 겪고시 사이에 엔티티 편집 관리 :EF4의 ASP.NET - HTTP 게시물 및 롤백

사용자는 기존 주문을 개정합니다. 주문은 복잡합니다 - 관련 '엔티티'(주소, 게시 옵션, 공급 업체, 모델, 다양한 항목 등)가 많이 있습니다. 여러 http 게시물에 걸쳐 있습니다.

사용자가 변경 사항을 삭제하려고합니다.

-

나는 주문 엔티티를 가지고 사용자가이 편집 될 때 나는 ...

엔티티 협회에 다양한 변화를 만드는 중이라서 order.address을 변경하는 예를 들어, order.items.add (항목)

단일 게시물에서는 괜찮 으면서도 여러 게시물에서 가장 좋은 상태를 저장하는 방법을 알지 못합니다. 엔티티를 저장하면 다른 데이터 컨텍스트를 통해 변경 사항을 저장할 수 없습니다. 세션 상태, 즉 수명이 긴 컨텍스트에 데이터 컨텍스트를 저장하는 것은 나쁜 습관이라고 읽었습니다. 롤백 (?) 할 수 없기 때문에 각 편집/게시 후에 변경 사항을 저장할 수 없습니다. 최종적으로 한 가지 큰 저장 (UI 설정을 가져 와서 하나의 청크에 적용)보다는 편집 프로세스 중에 엔티티와 실제로 작업하고 싶습니다.

이것은 꽤 일반적인 문제 여야합니다. 그것은 나를 미치게합니다. 어떤 도움을 정말 감사드립니다.

건배!

+0

셀프 추적 엔티티를 사용하고 있습니까? 그렇다면 viewstate에 저장할 수 있습니다. 즉, 커지지 않을 것임을 알고있는 경우입니다. –

답변

1

다중 페이지 마법사를 통해 복잡한 비즈니스 개체를 작성하는 것과 비슷한 문제가 있습니다.

마법사의 각 단계에서 부분적으로 완료된 비즈니스 오브젝트를 작성하는 대신, 비즈니스 오브젝트와 매우 유사하게 보이는 마법사 전용 오브젝트를 작성하여 마법사를 통해이를 채 웁니다. 마법사의 각 단계에서 마법사 개체가 데이터베이스에 저장됩니다. 마지막에는 사용자가이를 수락하고 실제 비즈니스 개체로 변환 된 다음 다른 모든 사람에게 표시되거나 비우고 아무도 그 존재를 알 수 없습니다.

이러한 접근 방식이 적합하지 않은 경우 엔티티 또는 데이터베이스 수준에서 차이점 추적을 찾고있는 것으로 생각됩니다. 시스템을 구현, 관리 또는 관리하기도 쉽지 않습니다. 전자는 엔티티에 대해 n의 계산 및 저장 일종의 항목으로 변경하고 엔티티를 실행 취소하는 알고리즘을 개발합니다. 후자는 RDBMS에 따라 다르지만 버전이있는 행 또는 유사 항목을 포함 할 수 있습니다.

1

네, 꽤 많이 우리에게 공통적입니다. 대부분의 시나리오에서는 MVC 방식을 사용합니다. 실제 ASP .NET MVC 프로젝트가 없어도 Business Layer (즉, Business.Entities)에 직접/단일 엔티티 매핑이없는 뷰/페이지/시나리오 등에서 유사한 ViewModel을 사용합니다. 이것은 DTO와 거의 비슷합니다.

Disconnected EF는 항상 사용하기 쉽습니다. 우리는 데이터를 검색하고 컨텍스트를 폐기 한 다음 필요에 따라 엔티티를 ViewModels/DTO로 변환합니다. 변경 사항을 유지해야하는 경우 새 컨텍스트를 만들고 최신 엔티티 인스턴스를 찾아서 변경해야합니다.

보기/페이지/컨트롤러가 이러한 ViewModel/DTO를 관리합니다. 변경되고 삭제 된 콘텐츠 추적은 HistoryList<T>을 도입하여 수행 할 수 있습니다 (구현하려면 List<T>까지 확장 가능).

일단 컨트롤러/워크 플로/구성 요소를 사용하면 ViewModel/DTO를 관찰하고 새로운 컨텍스트를 사용하여 엔터티에 필요한 변경을 수행하여 검색하고 유지할 수 있습니다.

그것은 약간의 코딩과 관련이 있으며, 나름의 장점과 단점이 있기 때문에 완벽하지는 않습니다.

/kp