0

간단한 요구 사항이 있습니다. (그래서 ... ...)여러 게시물에 걸쳐 ASP.NET에서 자체 추적 엔티티 사용

저는 Order, OrderLine, Product로 구성된 모델을 가지고 있습니다.

주문을 만들고 OrderLines (제품과 관련된 각 OrderLine)을 추가하려고합니다. 나는 Order를 만들고 그것에 OrderLines를 추가한다. 게시물 사이에 Order 엔터티를 Session (또는 ViewState)에 저장합니다. 그냥 잘 알고있는 바이너리 직렬화에 대한 지원을 추가했습니다.

따라서 관계는 Order> OrderLine (s)> Product (s)입니다.

당신은 이미 문제가 무엇인지 짐작할 수 있습니다. SaveChanges()를 실행하면 객체의 키 값이 ObjectStateManager의 다른 객체와 충돌하기 때문에 'AcceptChanges를 계속할 수 없습니다.'라는 메시지가 나타납니다. 오류.

나는 여러 기사를 온라인에서 언급했지만 아무도이 사례를 다루지 않는 것으로 보인다. http://blogs.msdn.com/b/diego/archive/2010/10/06/self-tracking-entities-applychanges-and-duplicate-entities.aspx.

매우 일반적인 요구 사항이어야합니다. Entity Framework에서 DTO 등을 사용하지 않고 같은 종류의 일을하는 사람이 있습니까?

건배 - 도와주세요! :)

닉이 내가하기로 결정 무엇

+0

"여러 게시물에 걸쳐"는 무엇을 의미합니까? 이 웹 응용 프로그램입니까? 그렇다면 자체 추적 엔티티가 필요하지 않으며 세션에 저장하지 않아야합니다. 웹의 국적없는 본질을 존중해야합니다. STE는 다층 애플리케이션 용입니다 (예 : WCF -> Silverlight). – RPM1984

+0

감사합니다. 그래,이 웹 응용 프로그램이며 페이지 요청에 걸쳐 의미가 있습니다. EF가 생성 한 Order 엔티티를 사용하여 주문을 작성하고 싶습니다 (주문 행, 메모 추가 등). 내가 왜 안되니? 내가 어떻게해야합니까? - 자신의 'Order'엔티티 (클래스)를 생성하고, 작업 한 다음 저장시 새로운 EF Order Entity로 복사하는 방법 ?? 협회 등을 이해할 수있는 기성품 반을 가지고 있다고 생각하면 많은 추가 작업이 필요합니다.이 사례에서 무엇을 제안 하시겠습니까? (STE의 사용이 적절하지 않을 수 있음에 감사드립니다) –

답변

0

...

사용 EF 생성 기관 및 단체 (NOT STES - 당신이 닉 올바른지) 순서를 구축 할 수 있습니다. 항상 외래 키를 포함하십시오.

MergeOption을 NO TRACKING으로 설정합니다 (예 : 분리됨).

사용자가 주문을 작성하는 동안 게시물/페이지 요청간에 SESSION에 관련 엔터티를 저장합니다.

중요 : 하위 항목 (예 : OrderLine)을 연결하면 관계를 통해 기존 하위 항목을 연결하지 않지만 FK ID를 사용합니다. OrderLine.Product = product를 사용하지 말고 OrderLine.Product_Id = product.Id를 사용하십시오. 이 방법은 여러 컨텍스트의 여러 엔터티가있는 문제를 해결합니다.

주문이 완료되어 저장 준비가되면 컨텍스트에 추가하고 SaveChanges.

은 - NO 추적을

기존의 순서를 편집하기 ...

설정 MergeOption.

사용자가 주문을 편집하는 동안 게시물/페이지 요청간에 SESSION에 관련 엔터티를 저장합니다.

필자는 자체 엔티티 상태 표시기를 사용하여 분리되었을 때 엔티티가 추가, 수정 또는 삭제되었는지 기록 할 수 있습니다.

편집이 완료되어 저장 준비가되면 컨텍스트에 연결하고 변경 사항을 처리합니다 (ObjectState를 MODIFIED로 설정). SaveChanges.

-

꿈을 작품 - 수명이 짧은 상황 (UOW) - 더보기 모델 또는 DTO (단순히 엔티티 클래스를 사용) - 아니 복잡한 코드 (등 그래프를 첨부/detatching).

참고 : VIEWSTATE에 저장하지 않습니다. InProc에서 SQL로 변경하고자 할 때이 부분을 조사해야합니다. 업데이트됩니다.

아마도 내가 놓친 것이 있지만 가능한 해결책을 연구하는 데 많은 시간을 투자했습니다.

+0

허위 경보. ViewState에 저장할 수 있습니다. (편집하기 전에 Order를 검색하고 ViewState에 저장할 때 사용합니다.) –

0

나는이 말을 "NOT STEs"라고 들었지만 그 이유는 무엇입니까? WinForms, WPF 및 ASP.Net 구성 요소가 있고 모든 계층에 내 STE를 사용하는 다중 계층 응용 프로그램이 있습니다. ASP에서 단지 게시물/변경 사항 사이에 Viewstate \ Sessionstate에 STE를 다시 유지해야하며 코드가 올바르게 작동해야합니다.

많은 수준의 관계가있는 엔티티가 있는데 문제가없는 관계가 몇 개 있어도 주체가 동일하기 때문에 이에 대한 예가 거의 없습니다. 여러분의 필요에 맞게 스크립트를 얻을 수있는 시간/인내가 있다면 STE를 계속 사용하는 것이 좋습니다. 이제는 모든 응용 프로그램에서 사용하는 STE 기반의 견고한 프레임 워크를 갖게되었습니다.

STE의,이 엔티티 프레임 워크 대 STES의 종종 간과 장점 중 하나입니다 모델 및 관리 응용 프로그램이 실제로 닷넷 4.0 날 때 셰어 (닷넷 3.5)의 데이터에 액세스 할 수 있습니다.

은 특정 문제에 대한 도움을 Self-Tracking Entities: ApplyChanges and duplicate entities 을 참조하십시오.

관련 문제