EF 4, POCO를 사용하고 있습니다. 작업은 데이터베이스에서 가져와 연결 해제 된 모드에서 업데이트 (추가, 업데이트, 삭제 작업)해야하는 DomainObject 유형의 긴 데이터 집합을 갖는 것입니다. 나중에 업데이트 된 세트를 데이터베이스로 다시 푸시 할 수 있습니까? 우리가 데이터를로드하기 때문에 테이블에 평행 한 변화가 없다고 가정합니다. 나는 context.SaveChanges()가 업데이트를 수행하지만 문제는 모든 변경 사항을 좀더 List에서 DbSet으로 되돌려 놓는 방법인가 아니면 단절 모드에서 DbSet을 사용하여 직접 작업 할 수있는 방법인가하는 것입니다. 감사!EF 4 : 연결이 끊긴 데이터 집합을 업데이트하는 방법은 무엇입니까?
답변
자동 추적 개체는 EDMX + ObjectContext는의 API의 기능입니다 DbSet
) 사용할 수 없습니다. 자체 추적 엔티티는 변경 세트 패턴 (예 : 이전 데이터 세트)의 구현입니다. SO의 일부 참조 : 당신이 대답은 아주 간단합니다 자동 추적 엔터티를 사용하지 않는 경우
- 당신은 당신이 한 변화 EF 무슨 말을해야합니다. 분리 된 엔티티를 사용하고 나면 엔티티를 새로운 컨텍스트에 다시 첨부하고 삽입 된 내용, 업데이트 된 내용, 삭제 된 내용 및 관계를 어떻게 변경했는지 수동으로 정확히 말해야합니다. 이 프로세스의 핵심 구성 요소는 DbContext API (context.ChangeTracker
)의 ObjectContext API (context.ObjectStateManager
) 또는 DbChangeTracker
에서 ObjectStateManager
입니다. 많은 사람들이 일반적으로 다른 프로세스를 사용하여 관계를 처리 할 때 이것은 매우 어렵습니다. 우리는 엔티티 그래프를 다시로드하고 분리 된 엔티티 그래프에서 변경 사항을 첨부 된 엔티티 그래프로 병합합니다. 일부 참조 :
- Update relationships when saving changes EF4 POCO objects
- EF4/POCO/Repository how to update relationships
전체 프로세스가 당신이 원하는 업데이트의 수에 따라 매우 느릴 수 있음을주의하십시오. 이유는 EF doesn't support command batching이므로 각 삽입, 업데이트, 삭제는 데이터베이스에 대한 별도의 왕복으로 실행됩니다. 100.000 복잡한 개체를 업데이트하면 SaveChanges
의 실행에 몇 분이 걸릴 것으로 예상 할 수 있습니다.
편집 : 당신은 당신이 "변화"에 대한 정보를 전송하는 트릭을 사용할 수 있습니다 관계없이 개체에서만 작동 매우 특별한 상황에서
가 :
public void ProcessChanges(IEnumerable<DomainObject> entities)
{
foreach(var entity in entities)
{
if (entity.Id == 0)
{
// New entity
}
else if (entity.Id > 0)
{
// Modified entity (you cannot say if entity war really modified,
// you must update it always).
}
else
{
// Use negative Id (origId * -1) to mark entity as deleted
// reverse Id and delete entity
}
}
}
이 평면 객체에 대해서만 작동 간단한 키.
자기 추적 엔티티를 사용해 보셨습니까? 당신이 DbContext API에 대한 당신의 매핑/코드가 의존하는 경우 (당신이 언급 한 있도록
http://msdn.microsoft.com/en-us/library/ff407090.aspx
http://blogs.msdn.com/b/adonet/archive/2010/06/02/working-with-sets-of-self-tracking-entities.aspx
힌트를 보내 주셔서 감사합니다. 나는이 특징을 알지 못했다. 내가 그것을 확인하자. – YMC
또한이 책에서 자체 트러스 팅 엔티티의 훌륭한 예를 찾을 수 있습니다. Entity Framework Recipes : A Problem-Solution Approach Google에서 찾아 보면 미리보기가 표시되며 올바른 예제 –
"Entity Framework Recipes : A Problem-Solution Approach"의 9-5, 9-6, 9-7 및 9-9 섹션 찾기 –
- 1. 연결이 끊긴 데이터 작업
- 2. 연결이 끊긴 POCO 확인
- 3. 연결이 끊긴 세션 데이터 집합 유지
- 4. 연결이 끊긴 환경에서 Excel 또는 XML 데이터 원본을 업데이트하는 가장 좋은 방법은 무엇입니까?
- 5. 연결이 끊긴 네트워크 드라이브 정리하기
- 6. Svn 및 연결이 끊긴 편집
- 7. 연결이 끊긴 집합으로 연결된 집합
- 8. 연결이 끊긴 데이터 집합의 여러 테이블에서 SQLServer로 변경 보내기
- 9. 연결이 끊긴 ADO 레코드가있는 액세스 오류
- 10. ObjectInputStream.readObject() 연결이 끊긴 경우 예외를 throw하지 않습니다.
- 11. MNesia는 연결이 끊긴 후 동기화를 지원합니까?
- 12. 인터넷 연결이 끊긴 상태에서 OpenId 개발
- 13. Plinqo 4 대 EF 4
- 14. SQL Server Compact를 사용하여 연결이 끊긴 데이터 Windows 프로그램
- 15. Entity-Framework : 연결이 끊긴 데이터 집합에서 모델을 만드는 방법?
- 16. WCF 4 및 EF 4 사용
- 17. "연결이 끊긴"드라이브 매핑을 수정하는 중
- 18. Nhibernate - 연결이 끊긴 세션에서 일시적인 객체 참조
- 19. dotRAS 연결이 끊긴 상태가 트리거되지 않았습니다.
- 20. 연결이 끊긴 도메인 클라이언트에서 SecurityNegotiationException이 발생했습니다.
- 21. net.CreateServer에서 연결이 끊긴 클라이언트를 어떻게 검색합니까?
- 22. 연결이 끊긴 네트워크 드라이브 다시 연결
- 23. EF 4에서 변경된 모든 데이터를 업데이트하는 가장 좋은 방법은 무엇입니까?
- 24. 데이터 집합을 쿼리하고 결과를 반복하는 방법은 무엇입니까?
- 25. EF 4 관계
- 26. MS 액세스 양식 ADO 연결이 끊긴 레코드 집합
- 27. EF 4, POCO 및 AddOrUpdate
- 28. 비정상적으로 연결이 끊긴 TCP 소켓 및 쓰기 제한 시간
- 29. 모바일 장치 아키텍처 - iOS, Android, WP7 및 연결이 끊긴 인스턴스
- 30. ASP.NET에서 연결이 끊긴 아키텍처에서 DataBound 컨트롤을 사용하려면 어떻게해야합니까?
게시물을 보내 주셔서 감사합니다. 현장에서 좋은 경험이있는 것 같습니다. 맞아, 나는 POCO를 사용하고있어 STE는 나를 도와주지 않는다. DomainObject의 List를 가지고 무엇이 삽입되거나 업데이트되었는지 어떻게 알 수 있습니까? 업데이트되고 추가 된 레코드에 대해 2 개의 개별 목록이 필요하거나 작업 정보를 저장하기 위해 DomainObject를 확장해야하는 것처럼 보입니까? – YMC
네, 그 정보를 두 번째 데이터 구조 나 도메인 객체로 전달해야합니다. 실제로는 자신의 STE 구현을 의미합니다. 그것은 분명히 당신이 일반적으로 원하지 않는 일이며 분명히 내가 설명한 접근법을 사용하는 이유입니다 : DB에서 엔티티를 로딩하고 변경 사항을 병합하십시오. 그러나 매우 간단한 시나리오에서 수정 작업에 대한 정보를 전송할 수있는 유일한 방법은 내 말은 아닙니다. 샘플을 제 대답에 추가 할 것입니다. –
내 작업을 명확하게하겠습니다. 어쩌면 당신은 해결책을 제안 할 수 있습니다 : 1) 나는 타이어 사이에 데이터를 보낼 필요가 없습니다 .2) 그것은 하나의 일반 도메인 엔티티, 그래프가 아닙니다 .3) 분리 된 데이터 세트를 통해 나는 내 도메인 객체의 일반 일반 목록을 의미했습니다. DbSet을 직접 사용할 수 있습니까? 그 목적은 Db를 한 번 요청한 후 메모리에서 복잡한 처리 (DB를 다루지 않음)를 수행하고, 메모리 구조에 데이터를 요청, 업데이트 및 추가합니다. DB에 직접 작업하는 데 더 많은 시간이 소요됩니다. 마지막으로 DB에 변경 사항을 적용하거나 전체 데이터 세트 (DB 용어로 표)를 대체하여 DB에 대한 변경 사항을 무시하십시오. – YMC