2012-03-19 2 views
1

내 문제는 매우 간단합니다. 기존 개체에 대한 참조를 사용하여 새로 만든 개체를 저장하려고합니다. 기존 개체는 다른 컨텍스트에서로드되고 세션 중에 저장됩니다. 이 게시물에 대한 유사 : Entity Framework Attaching a Persisted Object to the New ObjectEntitiyFramework4 - 기존 엔터티를 참조하여 새 엔터티 저장

나는이 모델을 가지고 : EntityModel

사용자가 새 시트 작성 (템플릿 등)을 사용할 수있는 정의에 따라 섹션과 필드로 채워집니다 새 단추 안타 . 이 시트는 세션에 저장되어 표시됩니다. 사용자는 필드 값을 입력하고 저장할 수 있습니다. 문제가 발생하는 것을 알 아야합니다.

시트를 저장하면 전체 개체 그래프가 새 개체로 저장됩니다. 하지만 정의는 이미 데이터베이스에 있습니다 -> InvalidOperationException ("속성의 현재 값이 null 일 때만 EntityKey 속성을 설정할 수 있습니다.")

시트는 임시/잘못된 EntityKey.

내가 시도한 세 번째 해결책 : 새 컨텍스트에 수동으로 정의를 첨부하지만 Attach는 InvalidOperationException ("임시 EntityKey 값을 가진 개체를 개체 컨텍스트에 연결할 수 없습니다.")로 연결되는 전체 개체 그래프를 연결시킵니다.) 전체 그래프를 확인했는데 그래프의 항목 중 임시 엔티티 키가 하나도 없습니다. (SectionDefinitions 및 FieldDefinitions). Attach() 또한 Section, Field 및 Sheet 인스턴스를 첨부하려고 시도하는 것 같습니다.

새 항목을 새 항목으로 삽입하고 기존 정의를 참조하기 만하면됩니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

테스트 솔루션은 여기에 업로드 : http://www.coderline.net/AttachingTestSuite.zip

이 제안을 기대하겠습니다.

답변

2

시트를 마지막으로 저장하면 새 개체를 만들고 현재 컨텍스트에서 구체화되지 않은 개체에 대한 참조가 아닌 필수 ID로 개체를 채워야합니다.

이것은 어색하지만 ORM의 예상되는 동작입니다. 엔티티 프레임 워크는 엔터프라이즈 상황에 맞는 몇 가지 규칙에 따라 설계되었습니다. 객체 트리가로드되고, 다른 레이어에 대해 직렬화되고, 해당 레이어에서 직렬화 해제되고, 컨텍스트에 첨부되어 저장되는 다중 계층 작업에 적합하도록 설계되었습니다. 즉, 연결될 때 해당 트리에 균질 한 개체가 있어야합니다.

+0

EntityFramework에서 이런 유형의 사용법을 본 적이 없습니다. 참조 된 객체를 단순히 ID로 정의 할 수 있습니까 (일부 특수 속성 사용)? 네가 나를 위해 몇 가지 링크가 있다면 정말 고마워. – Danielku15

+0

감사합니다. 나는 당신의 힌트에 따라 해결책을 찾은 것 같아요. 나는 여기에 설명 된 ForeignKeys를 만들었습니다 : http://blogs.msdn.com/b/efdesign/archive/2009/03/16/foreign-keys-in-the-entity-framework.aspx 그 후 나는 ID를 사용하여 정의를 참조하는 내 시트의 딥 클론입니다. 감사. – Danielku15

+0

이제 해당 스프레드 시트의 업데이트에 따라 추가 문제가 있습니다. 시나리오입니다. 데이터베이스에서 기존 시트를로드하고 시트에 정의를 기반으로 새 섹션을 추가합니다. 편집 된 시트를 다시 저장하려면 인스턴스를 첨부해야합니다. 그리고 거기에서 임시 EntitiyKeys 문제가 다시 발생합니다. 그런 구조의 편집을 어떻게 관리 할 생각이 있습니까? – Danielku15

관련 문제