문제

WCF 서비스에서 관련 데이터를 검색하고 Windows Forms 응용 프로그램 내에서 업데이트 한 다음 WCF를 통해 업데이트 된 데이터를 반환하여 데이터베이스에 지속될 N-Tier 솔루션을 만들었습니다. 응용 프로그램, WCF 서비스 및 데이터베이스는 모두 다른 컴퓨터에 있습니다.

검색되는 데이터는 객체 및 자식 객체로 구성됩니다 ...

public Product Select(string catalogueNumber) {

  return (from p in this.ProductEntities.Products.Include(@"Tracks")
            where p.vcCatalogueNumber == catalogueNumber
            select p).FirstOrDefault() ?? new Product();
}

클라이언트 응용 프로그램에서 적용하는 업데이트는 기존 콘텐츠를 업데이트 할 수 있으며 추가 "트랙"객체를 삽입 할 수 있습니다.

클라이언트 응용 프로그램에서 제품 객체를 다시 받으면 모든 업데이트를 올바르게 볼 수 있지만 모든 변경 사항을 올바르게 저장하려면 몇 개의 후프를 뛰어 넘어야합니다 ...

public void Save(Product product) {

    Product original = this.Select(product.vcCatalogueNumber);
    if (original.EntityKey != null) {

        this.ProductEntities.ApplyPropertyChanges(product.EntityKey.EntitySetName, product);

        // There must be a better way to sort out the child objects...
        foreach (Track track in product.Tracks.ToList()) {

            if (track.EntityKey == null) {
                original.Tracks.Add(track);
            }
            else {
                this.ProductEntities.ApplyPropertyChanges(track.EntityKey.EntitySetName, track);
            }

        }

    }
    else {

        this.ProductEntities.AddToProducts(product);

    }

    this.ProductEntities.SaveChanges();

}

확실히, 이것을하는 더 쉬운 방법이 있어야합니까?

참고 : 엔티티 백 프로젝트를 조사하는 데 오후의 더 나은 부분을 보냈지 만 EF RTM과 함께 작동하도록 업데이트되지 않았다는 것을 알았습니다. 특히, 새로운 객체를 혼합 할 때 기존 데이터 예외가 성공적으로 업데이트됩니다.

도움이 되었습니까?

해결책

귀하의 특정 시나리오에 대한 기성품 답변이 없지만 질문 만 있습니다. Ado.net Data Services (FKA "Astoria")를 확인 했습니까?

그들은 WCF의 RESTFUL 인터페이스 인 Entity Framework 위에 구축되었으며 클라이언트 측 경험을 제공하며 쿼리뿐만 아니라 데이터베이스에 레코드를 삽입하여 업데이트하고 삽입 할 수있는 괜찮은 스토리가있는 것 같습니다.

이것이 옵션 일 수 있습니까?

확인하십시오 MSDN, 에 데이비드 헤이든의 블로그, 에 채널9, 또는 훌륭한 세션을보십시오 혼합 08 및 믹스 09

마크

다른 팁

Danny Simmons의 Entitybag 샘플을 살펴 봐야 할 것입니다.

이러한 종류의 문제를 단순화하도록 설계되었습니다.http://code.msdn.microsoft.com/entitybag/

Catz가 말한 것처럼 .NET 4.0에서는 상황이 훨씬 쉬울 것입니다.

우리가 도와 줄 계획 중 하나는 자체 추적이 가능한 클래스를 생성하는 T4 템플릿을 만드는 것입니다. 그들이 서버 계층으로 돌아올 때의 컨텍스트.

도움이 되었기를 바랍니다

Alex (Microsoft의 Entity Framework 팀의 PM) Alex를 건배합니다.

나는이 스레드가 조용한 것을보고, 나는 약간의 업데이트를 허용한다 ...

weeeeee! 자체 추적 엔티티가 EF 4에 도착했습니다!

이것 좀 봐:

http://blogs.msdn.com/efdesign/archive/2009/03/24/self-tracking-entities-in-the-entity-framework.aspx
엔티티 프레임 워크 팀의 자체 추적 메커니즘에 대한 설명.

http://aleembawany.com/2009/05/17/new-features-in-entity-framework-40-v2/
EF 4의 새로운 기능을 모집합니다.

http://msdn.microsoft.com/en-us/magazine/ee321569.aspx
연결이 끊긴 엔티티에 대한 몇 가지 n-tier 패턴의 비교.

즐기다 !

Entity Framewrok 4에서는 "ApplyCurrentValues"방법을 사용하여 분리 된 엔티티를 업데이트 할 수 있습니다.

시나리오에서는 다음과 같은 것입니다.

this.ProductEntities.Product.ApplyCurrentValues(product);
foreach (Track track in product.Tracks.ToList()) {
if (track.EntityKey != null)
{
//Update Entity
  this.ProductEntities.Track.ApplyCurrentValues(track);
}
else
{   
  //New Entity
  this.ProductEntities.Track.Attach(track);
}

}

유용하기를 바랍니다

엔티티 프레임 워크 v1.0의 한계 중 하나는 엔티티 업데이트입니다. 불행히도 버전 2가 도착할 때까지 운이 좋지 않다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top