2010-05-20 6 views
1

시나리오 : Entity Framework 4, POCO 템플릿 및 마스터 세부 관계.마스터 세부 관계의 지속 세부 정보 EF4 POCO

내가 이런 마스터 유형이 있다고 가정하자 : 다음 내 상황에 마스터 인스턴스를 추가하고 커밋하면

//partial implementation of master entity 
partial class Master 
{ 
    public void AddDetail(x,y,z) 
    { 
     var detail = new Detail() 
     { 
      X = x, 
      Y = y, 
      Z = z, 
     }; 

     //add the detail to the master 
     this.Details.Add(detail); 
    } 
} 

를, 세부 사항이 저장되지 않습니다 :

var masterObject = new Master(); 
masterObject.AddDetail(1,2,3); 
myContext.MasterSet.AddObject(masterObject); 

이 있습니까 POCO 템플릿을 사용할 때 reachabillity가 유지하는 세부 정보를 만드는 방법은 무엇입니까? 다른 방법이 있습니까? Master 엔터티의 Details 컬렉션은 FixUpCollection이므로 변경 사항을 IMO에서 추적해야합니다.

그래서, 어떤 아이디어가이 작업을 W/O가 POCO를 너무 많이 죽이는 방법을 만드나요? 을 할 수

답변

0

해결책을 찾았습니다.

I 단순히과 같이 SaveOptions.DetectChangesBeforeSave를 통과해야이 날 w/컨텍스트에 각 세부를 부착 O를 마스터 객체 상세 오브젝트를 추가 할 수

context.SaveChanges(SaveOptions.DetectChangesBeforeSave); 

.

-1

당신 :

개인 필드에 참조로 저장되는 상황을 받아들이는 당신의 엔티티에 생성자를 추가합니다. 그런 다음 AddDetail 함수는 _context 필드를 확인하고 인스턴스화 된 컨텍스트를 참조하는 경우 마스터 레코드를 저장 한 후 컨텍스트에 세부 정보를 추가 할 수 있습니다. 는 단일 책임의 원칙을 위반 그러나

...

이 가장 좋은 패턴하지 않을 수 있습니다. Repository 패턴을 사용하고 Repository가 저장되지 않은 Details를 커밋하는 것이 더 좋을 것이라고 생각합니다. Here은 Entity Framework 4에서 저장소 패턴을 구현하는 데 유용한 기사입니다.

+0

첫 번째 제안은 POCO를 심각하게 위반합니다. 두 번째 제안은 변경된 세부 사항의 문제를 해결하지 못합니다. 저장소는 집계 루트를 저장하기로되어 있습니다. 집계의 하위 개체에 대한 저장소가 필요하지 않습니다. 저장소에서이 문제를 해결하려면 세부 정보가 새 것인지 이미 영구적인지 확인해야합니다. –

관련 문제